我最近刚刚购买了一台专用服务器,用于升级一个小型社区网站,而我们过去 3 年一直使用共享主机。我安装了 httpd、php 和 mysql(网络服务器的常用组件)。我为一些虚拟主机配置了 httpd,并安装了 webmin 和 cacti。一切似乎都运行得非常顺利,直到我注意到 cacti 的内存使用图表中出现了一些异常。
我的服务器有 2GB 的 RAM,但不知何故其中 1.7GB 已被使用。我通过 SSH 以 root 身份登录,重新启动服务器,然后运行“top”。它立即使用 600MB RAM,并继续缓慢增加,但看起来没有任何东西在使用 RAM。我运行了“ps aux”。但不知何故,似乎没有正在运行的应用程序使用超过 2% 的 RAM。如果我将“ps aux”中的所有内存使用量加起来,结果约为 20.6%,我认为这接近 400MB RAM,这是在使用超过 800MB RAM 的情况下。
因此,在我看来,似乎有大约 400MB 的 RAM 被使用,而没有应用程序占用它。随着时间的推移,内存会慢慢增加,直到使用所有可用的 RAM。不过,我还没有让它达到那个程度。
我不太清楚下一步该怎么做才能解决这个问题。如能提供任何帮助我将不胜感激。
来自 Cacti 的内存使用情况图表:
如果需要更多信息,请告诉我。
答案1
首先,检查此页面:Linux 占用了我的内存。
您没有描述任何表明内存泄漏的行为,至少我没有发现。如上页所述,内核将使用空闲 RAM 作为磁盘读取缓存。内核将立即释放分配为缓存的字节给任何需要它的应用程序。
尝试运行free
而不是-o
。执行此操作时,将为您提供可用 RAM 的值,其中考虑到当前用于缓存的内容。以下是我的一台服务器的一些示例输出:
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 量。
答案2
这是我的配置:
IBM M3,双四核,8GB RAM,CentOS 5 x86_64。
我们正在运行一个应用程序,该应用程序需要将数据保存在向量中,然后将其放入数据库中。运行该应用程序几天后,我们运行 top 并发现内存利用率达到 99% 以上。这看起来很奇怪,我想也许 CentOS 5 正在使用某种内存缓存,但我们可以看到服务器性能明显下降。
所以我决定深入研究一下。我们同时运行了两个终端窗口,以查看是否存在瓶颈。在一个窗口中,我们打印了应用程序接收数据的速度/秒数据,在另一个窗口中,我们针对该特定端口运行了 tcpdump 跟踪。
我们发现网卡运行速度极快,能够很好地处理这些数据。但内核无法获取这些数据并将其提供给我的应用程序。数据将保留在网络队列中,每隔 6-10 秒,应用程序就会收到大量数据,然后数据又会丢失。
解决方案:好吧,我没有 Cent OS 5 的任何东西。但是我们将操作系统切换到 Fedora 14 x86_64。内存利用率不到 1%,内核能够以极高的速度处理这些数据而无需任何排队。这就是我所拥有的一切,我不知道为什么 CentOS 不支持这种硬件架构。我们的其他 CentOS 安装运行良好。但是当我们采用双多核架构时,我们遇到了这个障碍。
希望这可以帮助。
谢谢
席德