linux释放cpu,red linux 8.0被占用的内存无法释放是怎么回事?

在Red Linux 8.0环境下,一个VBB 2.2.6论坛在400人在线时,1G内存几乎全部被占用,主要由httpd和mysqld进程消耗。当在线人数下降后,内存并未释放,即使停服Apache和MySQL,内存占用仍不降低,重启后才释放。这可能是由于Linux内核将空闲内存用作缓存以提高性能。讨论了Linux内存管理策略及如何查看内存占用情况。
摘要由CSDN通过智能技术生成

系统环境:

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内部的实现有关.

|

最近看了一篇文章,说是这样为了最大化利用内存资源,如果有这么多内存而不用,只是为了看着舒服的话,那么是一种浪费,所以linux尽量把内存作为缓存,只是在新的程序需要的时候再重新调整内存。

可能是我们用windows过多了吧,总是看着n多内存剩余!不过在linux下可能需要转变一下自己的观点。毕竟是不同的东西。

|

linux的内存管理方式与windows不同,在运行时基本使用全部内存,除所有进程占有内存外,剩余的内存主要用来作为buffer和cache这样可以提高程序运行速度。你可以用free命令查看就会发现很多内存用于buffer和cache

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值