URN Logo
UNIX Resources » Linux » China Linux Forum » C/C++编程版 » 28 » 求教,我的程序为什么用巨量的虚拟内存?
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
求教,我的程序为什么用巨量的虚拟内存?
 
 
 
 
 
 
 
 
 
 
Subject: 求教,我的程序为什么用巨量的虚拟内存?
Author: phunyx    Posted: 2005-07-25 17:15    Length: 225 byte(s)
[Original] [Print] [Top]
尽管我的程序只用了5M左右的实际内存,为什么top显示出来它的虚拟内存用量是好几百M,近1G.
我发现这种情况下,系统对鼠标键盘的反应也变慢了.

我的程序开了近百个线程,是不是线程使用不当导致的?望大侠们指教.多谢!
[Original] [Print] [Top]
Subject: Re: 求教,我的程序为什么用巨量的虚拟内存?
Author: drangon_zhou    Posted: 2005-07-25 22:06    Length: 183 byte(s)
[Original] [Print] [Top]
每个线程有8到10M的堆栈(因版本而异),加起来就1G罗,
一般没什么影响的,只是占系统地址空间,并没有实际分配页面,
可以考虑使用ulimit -s来降低堆栈,不过太低容易堆栈溢出
----
岂有豪情似旧时,花开花落两由之。
[Original] [Print] [Top]
Subject: Re: 求教,我的程序为什么用巨量的虚拟内存?
Author: phunyx    Posted: 2005-07-25 23:02    Length: 195 byte(s)
[Original] [Print] [Top]
8-10M?!
这么多,看来我得检查一下pthread缺省的堆栈大小.
如果我的系统下真是这么多,那我需要将它改小点.
虽然没有实际分配页面,但对系统(Fedora C2)性能还是有影响(我前面提到过).
[Original] [Print] [Top]
Subject: Re: 求教,我的程序为什么用巨量的虚拟内存?
Author: phunyx    Posted: 2005-07-25 23:16    Length: 50 byte(s)
[Original] [Print] [Top]
真的是将近10M!
请问ulimit是怎么用的?谢谢!
[Original] [Print] [Top]
Subject: Re: 求教,我的程序为什么用巨量的虚拟内存?
Author: tclwp    Posted: 2005-07-26 01:58    Length: 108 byte(s)
[Original] [Print] [Top]
ulimit -a
显示所有选项

如果你想将堆栈改为4M(太小?)
ulimit -s 4096
[Original] [Print] [Top]
Subject: Re: 求教,我的程序为什么用巨量的虚拟内存?
Author: Atu    Posted: 2005-07-26 08:26    Length: 114 byte(s)
[Original] [Print] [Top]
对系统性能的影响不是虚拟内存使用造成的

你的程序是否负载很大?或者错误的使用了忙循环?
[Original] [Print] [Top]
Subject: Re: 求教,我的程序为什么用巨量的虚拟内存?
Author: h_falls    Posted: 2005-07-26 09:50    Length: 583 byte(s)
[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]
Subject: Re: 求教,我的程序为什么用巨量的虚拟内存?
Author: Atu    Posted: 2005-07-26 11:20    Length: 62 byte(s)
[Original] [Print] [Top]
他哪里说错了?
你的free结果说明什么问题了?
[Original] [Print] [Top]
Subject: Re: 求教,我的程序为什么用巨量的虚拟内存?
Author: h_falls    Posted: 2005-07-26 14:34    Length: 132 byte(s)
[Original] [Print] [Top]
oh, 是我看错了。 楼主指的虚拟内存原来是指该进程在top里显示的VIRT项, 我以为是由vmstat和free命令报告的整个系统的virtual memory(swap)。
[Original] [Print] [Top]
Subject: Re: 求教,我的程序为什么用巨量的虚拟内存?
Author: phunyx    Posted: 2005-07-26 17:58    Length: 392 byte(s)
[Original] [Print] [Top]
我将缺省堆栈改为5M后,虚拟内存用量确实减半了.

我的程序是一个脚本解释器, 当用它来运行一些"高强度的"测试脚本时, 负载确实很大.
刚才用top比较了一下运行它们时cpu的用量, 发现系统反应慢确实是负载超高导致的.
高负载的原因是当程序线程多时, 产生的垃圾很多, 垃圾回收器总处于忙的状态. 看来
程序本身并没什么问题.

多谢各位大侠的讨论!
[Original] [Print] [Top]
« Previous thread
请教 读取目录项的问题。。
C/C++编程版
28
Next thread »
pthread实现的源码在哪里能看到
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:52:44, cost 0.042147159576416 ms.