当前位置: 技术问答>linux和unix
red linux 8.0被占用的内存无法释放是怎么回事?
来源: 互联网 发布时间:2015-03-29
本文导语: 系统环境: red linux 8.0+apache+php+mysql+VBB 2.2.6 论坛同时在线人数较多,经常在400人以上,1G内存经常被耗尽,不知道对于这样的访问量来说这个内存占用算不算正常。 另外,最最奇怪的是在线人数下来了内存却没有...
系统环境:
red linux 8.0+apache+php+mysql+VBB 2.2.6
论坛同时在线人数较多,经常在400人以上,1G内存经常被耗尽,不知道对于这样的访问量来说这个内存占用算不算正常。
另外,最最奇怪的是在线人数下来了内存却没有被释放,还是几乎全部被占用,停止apache和mysql服务后内存占用还是没有下来,重起机器后内存就被释放了。
偶对linux不熟悉,请教各位几个问题:
1、VBB论坛在线400人占用1G内存算正常吗?
2、在线人数下来了内存却没有被释放可能是什么原因造成的?
3、呵呵,一个很菜的问题,偶都不知道如何查看到底哪个进程占用了多少内存。
附:
在线人数从400多人回落到10人后的top输出(内存几乎全部被占用):
=============================================
2:48am up 3 days, 23:55, 1 user, load average: 0.02, 0.01, 0.03
91 processes: 90 sleeping, 1 running, 0 zombie, 0 stopped
CPU0 states: 1.0% user, 0.0% system, 0.0% nice, 98.4% idle
CPU1 states: 2.3% user, 0.1% system, 0.0% nice, 97.0% idle
CPU2 states: 0.3% user, 3.2% system, 0.0% nice, 95.4% idle
CPU3 states: 0.1% user, 0.5% system, 0.0% nice, 98.4% idle
Mem: 1030500K av, 1017252K used, 13248K free, 0K shrd, 40576K buff
Swap: 104412K av, 6584K used, 97828K free 831468K cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
10729 root 15 0 5300 5296 4876 S 4.1 0.5 2:11 httpd
526 mysql 15 0 22908 20M 2184 S 1.1 1.9 1:12 mysqld
10980 root 15 0 1084 1084 828 R 0.7 0.1 0:03 top
10861 root 15 0 1192 1192 996 S 0.1 0.1 0:00 bash
1 root 15 0 476 444 420 S 0.0 0.0 0:09 init
2 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU0
3 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU1
4 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU2
5 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU3
6 root 15 0 0 0 0 SW 0.0 0.0 0:00 keventd
7 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU0
8 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU1
9 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU2
10 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU3
重起机器1分钟(在线人数10)后的top输出(内存占用不多):
=============================================
3:22am up 1 min, 1 user, load average: 0.15, 0.06, 0.02
62 processes: 61 sleeping, 1 running, 0 zombie, 0 stopped
CPU0 states: 0.0% user, 0.1% system, 0.0% nice, 99.0% idle
CPU1 states: 0.0% user, 0.0% system, 0.0% nice, 100.0% idle
CPU2 states: 0.1% user, 0.0% system, 0.0% nice, 99.0% idle
CPU3 states: 0.1% user, 0.0% system, 0.0% nice, 99.0% idle
Mem: 1030500K av, 87076K used, 943424K free, 0K shrd, 7984K buff
Swap: 104412K av, 0K used, 104412K free 39688K cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
563 root 15 0 5304 5300 5168 S 1.9 0.5 0:00 httpd
662 root 15 0 1016 1016 824 R 0.9 0.0 0:00 top
1 root 15 0 480 480 424 S 0.0 0.0 0:05 init
2 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU0
3 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU1
4 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU2
5 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU3
6 root 15 0 0 0 0 SW 0.0 0.0 0:00 keventd
7 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU0
8 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU1
9 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU2
10 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU3
11 root 15 0 0 0 0 SW 0.0 0.0 0:00 kswapd
12 root 15 0 0 0 0 SW 0.0 0.0 0:00 bdflush
red linux 8.0+apache+php+mysql+VBB 2.2.6
论坛同时在线人数较多,经常在400人以上,1G内存经常被耗尽,不知道对于这样的访问量来说这个内存占用算不算正常。
另外,最最奇怪的是在线人数下来了内存却没有被释放,还是几乎全部被占用,停止apache和mysql服务后内存占用还是没有下来,重起机器后内存就被释放了。
偶对linux不熟悉,请教各位几个问题:
1、VBB论坛在线400人占用1G内存算正常吗?
2、在线人数下来了内存却没有被释放可能是什么原因造成的?
3、呵呵,一个很菜的问题,偶都不知道如何查看到底哪个进程占用了多少内存。
附:
在线人数从400多人回落到10人后的top输出(内存几乎全部被占用):
=============================================
2:48am up 3 days, 23:55, 1 user, load average: 0.02, 0.01, 0.03
91 processes: 90 sleeping, 1 running, 0 zombie, 0 stopped
CPU0 states: 1.0% user, 0.0% system, 0.0% nice, 98.4% idle
CPU1 states: 2.3% user, 0.1% system, 0.0% nice, 97.0% idle
CPU2 states: 0.3% user, 3.2% system, 0.0% nice, 95.4% idle
CPU3 states: 0.1% user, 0.5% system, 0.0% nice, 98.4% idle
Mem: 1030500K av, 1017252K used, 13248K free, 0K shrd, 40576K buff
Swap: 104412K av, 6584K used, 97828K free 831468K cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
10729 root 15 0 5300 5296 4876 S 4.1 0.5 2:11 httpd
526 mysql 15 0 22908 20M 2184 S 1.1 1.9 1:12 mysqld
10980 root 15 0 1084 1084 828 R 0.7 0.1 0:03 top
10861 root 15 0 1192 1192 996 S 0.1 0.1 0:00 bash
1 root 15 0 476 444 420 S 0.0 0.0 0:09 init
2 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU0
3 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU1
4 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU2
5 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU3
6 root 15 0 0 0 0 SW 0.0 0.0 0:00 keventd
7 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU0
8 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU1
9 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU2
10 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU3
重起机器1分钟(在线人数10)后的top输出(内存占用不多):
=============================================
3:22am up 1 min, 1 user, load average: 0.15, 0.06, 0.02
62 processes: 61 sleeping, 1 running, 0 zombie, 0 stopped
CPU0 states: 0.0% user, 0.1% system, 0.0% nice, 99.0% idle
CPU1 states: 0.0% user, 0.0% system, 0.0% nice, 100.0% idle
CPU2 states: 0.1% user, 0.0% system, 0.0% nice, 99.0% idle
CPU3 states: 0.1% user, 0.0% system, 0.0% nice, 99.0% idle
Mem: 1030500K av, 87076K used, 943424K free, 0K shrd, 7984K buff
Swap: 104412K av, 0K used, 104412K free 39688K cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
563 root 15 0 5304 5300 5168 S 1.9 0.5 0:00 httpd
662 root 15 0 1016 1016 824 R 0.9 0.0 0:00 top
1 root 15 0 480 480 424 S 0.0 0.0 0:05 init
2 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU0
3 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU1
4 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU2
5 root 0K 0 0 0 0 SW 0.0 0.0 0:00 migration_CPU3
6 root 15 0 0 0 0 SW 0.0 0.0 0:00 keventd
7 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU0
8 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU1
9 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU2
10 root 34 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU3
11 root 15 0 0 0 0 SW 0.0 0.0 0:00 kswapd
12 root 15 0 0 0 0 SW 0.0 0.0 0:00 bdflush
|
只有400个人在线是不可能用到1G内存的.
感觉你的那个1017252K used, 13248K free是个假的,也就是说,实际上并没有用那么多的内存.如果你不相信的话,你可以试试再开一个比较耗内存的程序,然后再用top命令看一下,13248K free应该还是不变.你可以试试看.....
可能释放出来的内存被放进了缓冲区,所以看起来好像空间没有释放,其实没并没有用那么多.这可能跟Linux内部的实现有关.
感觉你的那个1017252K used, 13248K free是个假的,也就是说,实际上并没有用那么多的内存.如果你不相信的话,你可以试试再开一个比较耗内存的程序,然后再用top命令看一下,13248K free应该还是不变.你可以试试看.....
可能释放出来的内存被放进了缓冲区,所以看起来好像空间没有释放,其实没并没有用那么多.这可能跟Linux内部的实现有关.
|
最近看了一篇文章,说是这样为了最大化利用内存资源,如果有这么多内存而不用,只是为了看着舒服的话,那么是一种浪费,所以linux尽量把内存作为缓存,只是在新的程序需要的时候再重新调整内存。
可能是我们用windows过多了吧,总是看着n多内存剩余!不过在linux下可能需要转变一下自己的观点。毕竟是不同的东西。
可能是我们用windows过多了吧,总是看着n多内存剩余!不过在linux下可能需要转变一下自己的观点。毕竟是不同的东西。
|
linux的内存管理方式与windows不同,在运行时基本使用全部内存,除所有进程占有内存外,剩余的内存主要用来作为buffer和cache这样可以提高程序运行速度。你可以用free命令查看就会发现很多内存用于buffer和cache