我已经上网大约1周了,我发现的一切都是:"CentOS知道如何使用ram,别担心",但我真的认为这是个问题
我有一个最近/干净安装了CentOS 6.4 X86_64 final的虚拟机,具有1.5GB RAM、1个处理器/4核和700MB SWAP,问题是内存消耗
我安装了postgresql、pgadmin3、JRE 7.25(既不是JDK也不是OpenJDK)、netbeans 7.3.1和apache,但大多数时候(99%)我只需要同时打开NB和firefox,显然还需要httpd和pgsql服务
好吧,当我打开netbeans时,它使用300Mb-350MB,Firefox使用100MB-150MB,系统使用的初始内存约为250MB,因此有750MB,系统监视器和free-m命令确认了这一点,但几分钟内,系统就吃掉了我所有的可用内存,并开始使用100MB-200MB SWAP,它真的变成了SsLOOWWW。。我正在开发一个简单的PHP/JS/HTML网站
当系统吃掉我所有的内存并进行交换时,free-m命令返回如下:
free -m
total used free shared buffers cached
Mem: 1511532 1477256 34276 0 18652 89325
-/+ b../c..: 1369279 142253
Swap: 711320 198652 512668
我知道实际可用内存大约是140MB,但是:
- 这占用了大量内存,系统变得非常慢
- 如果我关闭NB和FF,我只能获得两个释放的内存的一半(250MB)
- SWAP从未发布(仅在重新启动时)
- 如果我再次打开FF和NB,它会再次消耗250MB,甚至更多交换
我试过这个:
- 我将Swappiness值从60更改为5,实际上系统直到它使用了95%的RAM,才使用交换
- 我在启动时禁用了不必要的程序,如蓝牙管理器、邮件、登录声音、能量管理器(这是一台台式电脑)
- 我将JVM最大堆大小设置为256MB,实际上在java/netbeans(虚拟+共享)之间=实际使用的内存永远不会超过400MB
- 如果我逐个服务(包括多个httpd和PGSql子服务)进行检查,则使用的内存不超过750MB
- 我不得不说,当我在Win7/WAMP中测试完全相同的网站时,Netbeans、PGAdmin3、Firefox和posgres服务使用的内存与centOS中使用的内存几乎相同(500MB),系统使用的初始内存(900MB),总使用内存为1400MB,它不会改变,因此这不是编程错误
- 最后,我重新安装了CentOS,但问题仍然存在
如果您使用"htop"查看内存,您会发现内存条有三种颜色。我想,在你的情况下,使用的大部分记忆都是黄色的。
基本上,您的内存正被各种操作系统缓存使用。根据您的系统需要,这些缓存会被挤出内存。系统保留了ram副本,这样,如果在数据仍在内存缓存中的情况下再次执行相同的命令/程序,centos可以更快地执行。这就解释了为什么你只使用了一部分内存,一旦应用程序关闭就会释放。
这对我来说从来都不是放慢速度的原因
在你不断使用的过程中,我经历过firefox内存使用气球。
也许这是一个虚拟化平台的问题。您的主机操作系统是什么?您使用的虚拟化平台是什么?
正如我所说,我重新安装了CentOS x64,内存问题仍然存在,所以我有一个针对我自己的具体情况和我自己的经验的理论
如果您不完全确定您的程序/应用程序是为64位设计的,最好安装32位的CentOS,即使是AMD X64。
我的案例:
- Amd Athlon X4 640处理器(64位)
- VMware 7
- 1个处理器/4核,1.5GB RAM
- CentOS 6.4 32位
- apache(httpd)
- Php 5.3.3
- Postgresql,(服务器、客户端、contrib、libpq)
- pgAdmin III
- Firefox 17 ESR(默认centos浏览器),带有firebug和colorzilla扩展
- Opera(上次发布)
- JRE 7.25(仅适用于netbeans--从Oracle而非openJDK下载)
- Netbeans 7.3.1(PHP-HTML5)
现在我已经打开了pgadmin、netbeans(有10个活动选项卡)和firefox,可用内存是(150+MB可用+20+MB缓冲区+20+MB缓存),如果我在打开opera或任何其他程序时需要更多内存,则会释放一些缓存内存。哦,SWAP的使用是0.00000000,正如你所知,这可能真的很有帮助,但如果你使用的是在交换中加载的程序(全部或部分),它至少比在RAM中加载的软件慢10倍。