这些都是来自新手的问题。 (我已经看了其他相关的问题和答案,但没有一个似乎正在回答我自己的原始问题。)
我需要在Java程序中远程检索,parsing和报告Linux机器的CPU和内存使用情况。 这些应该由两个单独的命令来完成,而不是一个来解耦它们,以便在将来需要更改一个命令时使它更容易。
所以我的问题是:
我最好的意思是这些命令的输出是:
谢谢!
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
我build议在您要监控的系统上使用SNMP守护程序,并在您的Java应用程序中使用SNMP客户端库,而不是重新发明轮子。
net-snmp的标准MIB / OID中都包含了您希望监控的两个项目。
然后,您不必担心从其他实用程序的输出中提取所需的variables,也不必担心如何安全地传输该信息(可能是远程shell)的可移植性。
如果你真的必须从一个控制台命令parsing输出,你可能希望尽可能less的pipe道和grepping。
可能具有最简单输出的命令可以parsing为vmstat。
$ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- rb 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
就内存而言,请记住,上面的“自由”是免费的内存量,不需要将缓冲区和caching作为空闲的数据,所以您可能想要添加缓冲区和caching以免费获得“真实”的免费数量MiB的(即可直接供系统使用的物理内存)。
在CPU下面,us,sy,id和wa值对应'user','system','idle'和'iowait'。 像列出的所有其他工具一样,vmstat在一个时间点显示您的状态。 一定要经常刷新;-)
答案的“parsing”部分涉及播放标准输出和string格式,除非你使用SNMP(如果它是一个选项)可以给你更多的信息。
除此之外,“free”命令显示关于已用内存的数字,关于磁盘使用情况的“df”以及关于不同值的“top”。
两个命令都会给出最好的结果,从H / W状态“top”最适合RHEL
“真正的Unix方式”是使用可用的系统信息命令来创build脚本:free,ps,w,vmstat,iostat,ifstat,netstat等(提示:不要使用“top”,它是用于交互式使用的,不要使用!
“Java的方式”是使用一个库,SNMP自然而然地想起来,但它可能是一个巨大的锤子来破解这样一个小螺母。
所以:
如果您的收集器是用Java编写的,您可以考虑将Sigar集成到您的应用程序中。 Sigar是Hyperic监视工具用于收集操作系统统计信息的库。
我喜欢htop的颜色和sorting