我有一个 rails 3 应用程序,每天有 100-200 个独立访问者。服务器(Ubuntu)上消耗的总内存约为 1.5-2 GB。我想知道每个进程使用了多少内存。跟踪不同进程使用的内存的最佳工具是什么?
答案1
您只需启动top
并按下即可M根据内存使用情况对进程进行排序。
您可以运行ps vax | sort -k8n
来显示按驻留堆栈使用情况排序的进程(ps v
切换到以内存为中心的视图)。
您可以启用 snmp 并配置 mrtg 来定期轮询系统,生成您关心的进程使用了多少内存的图表。
您可以接受这样的事实:尽管 Ruby 有很多优点,但它在管理长时间运行的进程中的内存方面却很糟糕。:)
你可以结合更复杂的附言命令行(查看手册页,并阅读有关 -o 选项的信息)并rrdtool
使用 shell 脚本生成您关心的进程的历史统计数据。
ETC。
答案2
内存管理非常困难,但您可以使用top
,htop
或者,正如 dannysauer 建议的那样,使用类似的东西ps vax | sort -k8n
。如果您想获得概述/摘要,那么就free -m
很好。
但是进程消耗的内存比它们使用的内存少是很常见的。例如,如果你有 10 个进程,每个进程使用 10MB,这并不意味着这些进程将消耗 100MB。原因是 Linux 会识别进程之间相同的内存部分,因此你不需要拥有许多相同的副本。换句话说,你的系统总是可以使用比你拥有的更多的内存。所以你真的需要区分内存消耗和内存使用。
这并不总是容易的事。