|
|
|
|
 求教,我的程序为什么用巨量的虚拟内存? - phunyx [ 2005-07-25 17:15 | 225 byte(s)]
 Re: 求教,我的程序为什么用巨量的虚拟内存? - drangon_zhou [ 2005-07-25 22:06 | 183 byte(s)]
 Re: 求教,我的程序为什么用巨量的虚拟内存? - h_falls [ 2005-07-26 09:50 | 583 byte(s)]
 Re: 求教,我的程序为什么用巨量的虚拟内存? - Atu [ 2005-07-26 11:20 | 62 byte(s)]
 Re: 求教,我的程序为什么用巨量的虚拟内存? - h_falls [ 2005-07-26 14:34 | 132 byte(s)]
 Re: 求教,我的程序为什么用巨量的虚拟内存? - phunyx [ 2005-07-25 23:16 | 50 byte(s)]
 Re: 求教,我的程序为什么用巨量的虚拟内存? - tclwp [ 2005-07-26 01:58 | 108 byte(s)]
 Re: 求教,我的程序为什么用巨量的虚拟内存? - phunyx [ 2005-07-25 23:02 | 195 byte(s)]
 Re: 求教,我的程序为什么用巨量的虚拟内存? - Atu [ 2005-07-26 08:26 | 114 byte(s)]
 Re: 求教,我的程序为什么用巨量的虚拟内存? - phunyx [ 2005-07-26 17:58 | 392 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
尽管我的程序只用了5M左右的实际内存,为什么top显示出来它的虚拟内存用量是好几百M,近1G.
我发现这种情况下,系统对鼠标键盘的反应也变慢了.
我的程序开了近百个线程,是不是线程使用不当导致的?望大侠们指教.多谢!
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
每个线程有8到10M的堆栈(因版本而异),加起来就1G罗,
一般没什么影响的,只是占系统地址空间,并没有实际分配页面,
可以考虑使用ulimit -s来降低堆栈,不过太低容易堆栈溢出
|
|
|
----
岂有豪情似旧时,花开花落两由之。
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
8-10M?!
这么多,看来我得检查一下pthread缺省的堆栈大小.
如果我的系统下真是这么多,那我需要将它改小点.
虽然没有实际分配页面,但对系统(Fedora C2)性能还是有影响(我前面提到过).
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
我觉得你说得不对,我机器上现在有150个用户线程/进程。 但是我用free获得的结果是:
total used free shared buffers cached
Mem: 517056 363764 153292 0 49620 164548
-/+ buffers/cache: 149596 367460
Swap: 500968 0 500968
(我的ulimit -s 是 8192 , 你可以用 pthread_create在2。6内核上创建100个线程试试)
每个线程的堆栈如你所说,初始时是不分配空间的,对系统的虚拟内存没有影响。 搂主的程序应当是某些方面处理不当。
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
|
oh, 是我看错了。 楼主指的虚拟内存原来是指该进程在top里显示的VIRT项, 我以为是由vmstat和free命令报告的整个系统的virtual memory(swap)。
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
我将缺省堆栈改为5M后,虚拟内存用量确实减半了.
我的程序是一个脚本解释器, 当用它来运行一些"高强度的"测试脚本时, 负载确实很大.
刚才用top比较了一下运行它们时cpu的用量, 发现系统反应慢确实是负载超高导致的.
高负载的原因是当程序线程多时, 产生的垃圾很多, 垃圾回收器总处于忙的状态. 看来
程序本身并没什么问题.
多谢各位大侠的讨论!
|
|
|
[Original]
[Print]
[Top]
|
|
|