我最近刚刚购买了一台专用服务器,作为过去3年来共享主机的一个小型社区站点的升级。 我已经安装了httpd,php和mysql(通常为web服务器)。 我为几个虚拟主机configuration了httpd,并安装了webmin和cacti。 一切似乎运行相当顺利,直到我注意到在graphics中的内存使用情况的东西在仙人掌。
我的服务器有2G内存,由于某种原因,1.7G的使用中。 我通过SSH以root用户身份login,然后重新启动服务器,然后运行“top”。 直奔它使用600meg内存,并保持缓慢增加,但没有看到什么是使用内存。 我跑了'ps aux'。 但是,由于一些奇怪的原因,它看起来好像没有运行的应用程序正在使用超过2%的内存。 如果我从“ps aux”加起来的所有内存使用量出来,大约20.6%,我认为是接近400meg内存,这是当超过800meg RAM正在使用。
所以,在我看来,似乎在没有任何申请声称的情况下使用了大约400公克的公羊。 随着时间的推移,内存缓慢地上升,直到它使用所有可用的RAM。 虽然,我还没有让它达到那一点呢。
我不确定如何弄清楚下一步该怎么做才能解决问题。 任何帮助都将不胜感激。
来自仙人掌的内存使用图:
'ps aux'和'free -o'的输出
让我知道是否需要更多信息。
首先,检查这个页面: Linux吃了我的RAM 。
你没有描述任何表示内存泄漏的行为,至less没有我能够理解的内容。 如上所述,内核将使用可用RAM作为磁盘读取caching。 分配为caching的字节将被内核立即释放给任何需要它的应用程序。
尝试运行free
而不是-o
。 当你这样做的时候,你会得到一个可用的RAM值,考虑到当前正在使用的caching。 以下是我的一台服务器的一些示例输出:
user@host:~$ free total used free shared buffers cached Mem: 510652 430976 79676 0 134520 156876 -/+ buffers/cache: 139580 371072 Swap: 262136 40796 221340
请参阅-/+ buffers/cache
行? free
列中的值反映了应用程序可用的实际RAM数量。
这是我的configuration:
IBM M3,双四核,8GB内存,CentOS 5 x86_64。
我们正在运行一个需要将数据保存在向量中然后将其放入数据库的应用程序。 运行应用程序几天后,我们跑到最高处,发现内存利用率是99%+。 这看起来很奇怪,我想也许CentOS 5使用某种内存caching,但是我们可以看到服务器的性能明显下降。
所以我决定深入下去。 我们并排运行了两个terminal窗口,目击证据显示任何瓶颈。 在一个窗口中,我们打印数据的速度/秒我们的应用程序正在接收数据,在另一个窗口中,我们运行该特定端口的tcpdump跟踪。
我们发现网卡运行速度非常快,能够很好的处理这些数据。 但是内核却无法把这些数据提交给我的应用程序。 数据将保留在networking队列中,每隔6-10秒,应用程序就会收到一堆数据,并且会再次下降。
解决scheme:我没有Cent OS 5的任何东西,但我们将操作系统切换到Fedora 14 x86_64。 内存利用率低于1%,内核能够以极高的速度处理这些数据,而无需排队。 这是我所有的,我不知道为什么CentOS不支持这个硬件架构。 我们的其他CentOS安装工作正常。 但是当我们select双核心架构的时候,我们碰到了这个砖墙。
希望这可以帮助。
谢谢
希德