这些几乎都是新手提出的问题。(我已经查看了其他相关的问题和答案,但似乎都没有完全回答我自己的原始问题。)
我需要在 Java 程序中远程检索、解析和报告 Linux 机器的 CPU 和内存使用情况。这些应该在两个单独的命令而不是一个命令中完成,以将它们解耦,以便将来需要更改一个命令时更容易。
所以我的问题是:
- 为此目的,用于检索计算机的总 CPU 使用率的最佳命令是什么?
- 为此目的检索机器的总内存使用量的最佳命令是什么?
最好,我的意思是命令的输出是:
- 标准(独立/在 Linux 风格中应该是相同的——不是强制性的,但会很好。目标操作系统虽然是 RHEL 5)
- 可以很容易地解析(不会与我不感兴趣的其他信息混杂在一起)。
谢谢!
我建议不要重新发明轮子,而是在您打算监控的系统上使用 SNMP 守护程序,并在 Java 应用程序中使用 SNMP 客户端库。
您希望监控的两个项目都包含在net-snmp的标准 MIB/OID 中。
然后,您不必担心从其他实用程序的输出中提取您需要的变量,或者您将如何安全地传输该信息(可能是远程 shell)的可移植性。
top 命令显示内存和 CPU 信息以及其他统计信息。
如果您想从脚本或应用程序中调用它,请使用“-n 1”标志,这样它就不会在交互模式下运行。
例如让 CPU 使用率运行
内存使用调用
如果您真的必须解析控制台命令的输出,您可能希望尽可能少地使用管道和 grepping。
可能具有您可以解析的最简单输出的命令是 vmstat。
就内存而言,请注意上面的“空闲”是空闲的内存量,没有将缓冲区和缓存计算为空闲,因此您可能希望将 buff 和缓存添加到 free 以获得“真正的”空闲量MiB 的数量(即直接可供系统使用的物理内存)。
在 CPU 之下,us、sy、id 和 wa 值对应于 'user'、'system'、'idle' 和 'iowait'。与列出的所有其他工具一样,vmstat 会向您显示单个时间点的状态。一定要经常刷新;-)
答案的“解析”部分无论如何都涉及使用标准输出和字符串格式,除非您使用 SNMP(如果它是一个选项)可以为您提供更多信息。
除此之外,“free”命令显示有关已用内存的数字,“df”显示磁盘使用情况,“top”显示不同值。
最佳
系统统计
这两个命令都会从 u H/W 状态“top”中给出最好的结果,最好使用 RHEL
“真正的 Unix 方式”是使用可用的系统信息命令制作脚本:free、ps、w、vmstat、iostat、ifstat、netstat 等(提示:不要使用“top”,它是用于交互使用的,该死!)
“Java 方式”是使用库,首先自然会想到 SNMP,但它可能太大了,无法破解这么小的坚果。
所以 :
我喜欢
htop
它的颜色和排序如果您的收集器是用 Java 编写的,您可以考虑将Sigar集成到您的应用程序中。Sigar 是 Hyperic 监控工具用来收集操作系统统计信息的库。