这些几乎都是新手提出的问题。(我查看了其他相关问题和答案,但似乎没有一个能准确回答我最初的问题。)
我需要在 Java 程序中远程检索、解析和报告 Linux 机器的 CPU 和内存使用情况。这些操作应该用两个单独的命令而不是一个命令来完成,以便将它们解耦,以便在将来需要更改某个命令时更容易。
我的问题是:
- 为此目的,使用什么命令来检索机器的总 CPU 使用率?
- 为此目的,使用什么命令来检索机器的总内存使用情况最好?
最佳的意思是命令的输出是:
- 标准(独立/应该在各个 Linux 版本中相同 - 非强制性的,但会很好。目标操作系统是 RHEL 5)
- 可以轻松解析(不会与我不感兴趣的其他信息混淆)。
谢谢!
答案1
top 命令显示内存和 CPU 信息以及其他统计数据。
如果您想从脚本或应用程序调用它,请使用“-n 1”标志,以便它不会在交互模式下运行。
例如获取 CPU 使用率运行
top -n 1 | grep "Cpu"
(result)
Cpu(s): 1.6%us, 1.8%sy, 0.0%ni, 92.1%id, 0.6%wa, 0.1%hi, 3.8%si, 0.0%st
用于内存使用调用
top -n 1 | grep "Mem"
(result)
Mem: 1035240k total, 773088k used, 262152k free, 160348k buffers
答案2
我建议不要重新发明轮子,而是在您要监控的系统上使用 SNMP 守护程序,并在 Java 应用程序中使用 SNMP 客户端库。
您希望监控的两个项目都包含在网络管理协议的标准 MIB/OID。
那么您就不必担心从其他实用程序的输出中提取所需的变量,也不必担心如何安全地传输该信息的可移植性(大概是远程 shell)。
答案3
如果您确实必须解析控制台命令的输出,那么您可能希望尽可能少地进行管道和 grepping。
可能具有您可以解析的最简单的输出的命令是 vmstat。
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
4 0 420 54512 20408 1504148 0 0 1193 994 530 1397 10 6 76 7
就内存而言,请注意上面的“free”是可用的内存量,不将缓冲区和缓存算作可用内存,因此您可能需要将 buff 和 cache 添加到 free 中以获得“真正”可用的 MiB 量(即可直接供系统使用的物理内存)。
在 CPU 之下,us、sy、id 和 wa 值分别对应“用户”、“系统”、“空闲”和“iowait”。与列出的所有其他工具一样,vmstat 会显示某一时间点的状态。请务必经常刷新 ;-)
答案4
顶部
系统状态
这两个命令都会从您的硬件状态中给出最佳结果,其中“top”最适合 RHEL