顶部

顶部

这些几乎都是新手提出的问题。(我查看了其他相关问题和答案,但似乎没有一个能准确回答我最初的问题。)

我需要在 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

相关内容