论坛首页 综合技术论坛

项目事故和安全语言

浏览 74543 次
该帖已经被评为精华帖
作者 正文
   发表时间:2006-09-28  
charon 写道
robbin 写道

那用户进程光吃不吐,同时用户自己的resident还不增加,难道你不觉得蹊跷?进程吃进去的内存它弄到哪里去了?


resident内存不增加正常啊
分配的是VM的内存,resident指的是实际占用的物理内存。

引用

RES is resident memory usage, i.e. what's actually in the memory. In a way it could be probably used for measuring real memory usage of the app - if the app requests 100M memory from the kernel but actually uses only 1M, this should increase only by 1M. There are only two small problems, a) RES doesn't include memory that's swapped out (and no, the SWAP field in 'top' is not usable, it's completely bogus), b) some of that memory may be shared.


VM = swap + resident, but  swap=0
0 请登录后投票
   发表时间:2006-09-28  
>要不重起,第二天物理内存用光了怎么办?能肯定网站都访问不了哇。

那你真的曾经到物理内存用光了并且速度极慢的时候了么?
0 请登录后投票
   发表时间:2006-09-28  
ddd 写道
>要不重起,第二天物理内存用光了怎么办?能肯定网站都访问不了哇。

那你真的曾经到物理内存用光了并且速度极慢的时候了么?


没有,当内存被泄漏3.5GB的时候我就断然采取措施了。万一物理内存耗尽,同时网站不停有访问请求,导致其他用户进程得不到内存分配,后果是极其严重的!

以前在晓钢服务器就出现过这类问题,某程序没有限制上传文件大小,导致被恶意上传多个大文件,很快就把物理内存耗尽,连ssh都登录不上去,只能打电话给机房,要求机房工作人员重起。

[这个话题不想再回复了,感觉我在科普中...]
0 请登录后投票
   发表时间:2006-09-28  
robbin 写道
charon 写道
robbin 写道

那用户进程光吃不吐,同时用户自己的resident还不增加,难道你不觉得蹊跷?进程吃进去的内存它弄到哪里去了?


resident内存不增加正常啊
分配的是VM的内存,resident指的是实际占用的物理内存。


VM = swap + resident, but  swap=0


swap和resident都不增加,那怎么判断出来用户进程在申请内存?
有没有试过pmap? 所有分析内存耗用的工具中,这个是我见过最强悍的
0 请登录后投票
   发表时间:2006-09-28  
charon 写道
robbin 写道
charon 写道
robbin 写道

那用户进程光吃不吐,同时用户自己的resident还不增加,难道你不觉得蹊跷?进程吃进去的内存它弄到哪里去了?


resident内存不增加正常啊
分配的是VM的内存,resident指的是实际占用的物理内存。


VM = swap + resident, but  swap=0


swap和resident都不增加,那怎么判断出来用户进程在申请内存?
有没有试过pmap? 所有分析内存好用的工具中,这个是我见过最强悍的


watch cat /proc/meminfo
0 请登录后投票
   发表时间:2006-09-28  
嘿嘿,我去查查资料去(top和free到底反映的是什么信息),可能 要继续:)
因为我听一个玩apache+php很长时间的人说过,apache就是这个样子,时间长了占用一大堆内存(他没说占用的内存性质是什么,估计也是free查看的内存),但不影响性能。

我感觉迂回了这么一个大圈子(因为我一直从你机器已经无法对外反应出发的,没想到你只是预测到有可能出问题就直接重起了),现在可能才到点子上。
0 请登录后投票
   发表时间:2006-09-28  
ddd 写道
嘿嘿,我去查查资料去(top和free到底反映的是什么信息),可能 要继续:)
因为我听一个玩apache+php很长时间的人说过,apache就是这个样子,时间长了占用一大堆内存(他没说占用的内存性质是什么,估计也是free查看的内存),但不影响性能。

我感觉迂回了这么一个大圈子(因为我一直从你机器已经无法对外反应出发的,没想到你只是预测到有可能出问题就直接重起了),现在可能才到点子上。


看贴不仔细,我已经说了我用lighttpd+fastcgi+php也跑过了,照样泄漏,而且泄漏的更快,apache+mod_php泄漏的速度还慢点。

以前用32位Linux跑了三年的网站,apache+mod_php,从来就没有出现什么时间长了占用一大堆内存的现象。

free少不是问题,一般来说,Linux Kernel会尽量多利用free memory来做disk cache,所以经常出现disk cache使用了2GB,free只有几十MB都是正常的。但不管怎么说,你只要计算一下:

free + buffer + cache 这三项相加是没有被resident的物理内存,应该等于 物理内存 - resident。如果不相等,那就绝对是出现问题了。




0 请登录后投票
   发表时间:2006-09-28  
呵呵,问题在我看来已经是free到底反应的是什么的问题了,可能本质都和apache无关了。
0 请登录后投票
   发表时间:2006-09-28  
robbin 写道


VM = swap + resident, but  swap=0
charon 写道

swap和resident都不增加,那怎么判断出来用户进程在申请内存?
有没有试过pmap? 所有分析内存好用的工具中,这个是我见过最强悍的


watch cat /proc/meminfo


但是这个只能说明物理内存在被消耗。但是无法说明被哪个进程消耗了。
hehe. 这是个死无对证的事情牙
0 请登录后投票
   发表时间:2006-09-28  
charon 写道

但是这个只能说明物理内存在被消耗。但是无法说明被哪个进程消耗了。
hehe. 这是个死无对证的事情牙


那停掉PHP之后,为什么一切恢复正常,启动PHP,内存就持续泄漏?

这不算证据?

如果你知道一个房子里面只有一个人,然后另外一个人进去了,等他出来以后,手里拿着把血淋淋的刀,屋子里面的人已经死了。你会怎么想?你会说死无对证,屋子里面的人根本就不是那个拿刀的人杀的吗?
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics