You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多Unix客户端CPU/内存占用监控适配方案咨询

适配多Unix系统的CPU/内存监控命令及实现方案

针对你开发跨Unix客户端监控程序时遇到的命令适配问题,我整理了各系统原生的替代命令,以及更可靠的C语言API实现方案,帮你解决Solaris 9/10、HP-UX、AIX的兼容性问题:

Solaris 9/10(无top命令)

Solaris自带的mpstat、prstat、vmstat都是原生可用的工具,无需额外安装:

CPU使用率获取

使用mpstat采样一次CPU状态,计算非空闲占比:

# 输出CPU使用率(100减去空闲率)
mpstat 1 1 | awk 'NR==3 {print 100-$12}'

说明:mpstat第3行是采样数据,第12列idle为CPU空闲百分比,100减去该值即为使用率。

内存使用率获取

用prstat快速获取系统级内存数据:

# 输出内存使用率(已用内存/总内存*100)
prstat -n 1 1 1 | awk 'NR==4 {print $4/$3*100}'

或者用vmstat计算:

vmstat 1 1 | awk 'NR==3 {used=$3+$4+$5; total=used+$6; print used/total*100}'

HP-UX(避免依赖grep,单次执行命令)

HP-UX原生的sar、vmstat可以替代top,且无需依赖grep,直接用awk处理输出:

CPU使用率获取

# 单次采样CPU状态,计算使用率
sar -u 1 1 | awk 'NR==3 {print 100-$5}'

说明:sar -u输出的第3行是采样数据,第5列%idle为空闲占比。

内存使用率获取

# 通过vmstat计算已用内存占比
vmstat 1 1 | awk 'NR==3 {used=$3+$4; total=used+$5; print used/total*100}'

AIX(topas适配问题)

AIX推荐用sar、vmstat或svmon(原生自带)来获取监控数据:

CPU使用率获取

用sar采样:

sar -u 1 1 | awk 'NR==3 {print 100-$4}'

或者vmstat:

vmstat 1 1 | awk 'NR==3 {print 100-$15}'

内存使用率获取

用svmon直接获取系统内存统计:

svmon -G | awk 'NR==2 {print $3/$2*100}'

或者vmstat计算:

vmstat 1 1 | awk 'NR==3 {used=$4+$5+$6; total=used+$7; print used/total*100}'

更可靠的C语言实现方案(避免依赖外部命令)

如果想彻底摆脱系统命令的兼容性问题,推荐直接调用各Unix系统的原生API读取数据,效率更高且更稳定:

  • Solaris:使用kstat API(头文件<kstat.h>),可以获取CPU、内存等系统资源的详细统计;也可以读取/proc文件系统下的/proc/stat、/proc/meminfo(部分版本支持)。
  • HP-UX:调用sysmp()系统调用获取内存信息,getloadavg()获取负载,或使用perfmon相关API;也可以读取/dev/kmem(需要root权限)。
  • AIX:使用perfstat API(头文件<perfstat.h>),通过perfstat_cpu_total()获取CPU使用率,perfstat_memory_total()获取内存统计。

在C代码中可以通过条件编译适配不同系统:

#ifdef __sun__
// Solaris kstat 实现逻辑
#elif defined(__hpux)
// HP-UX sysmp 实现逻辑
#elif defined(_AIX)
// AIX perfstat 实现逻辑
#endif

这种方式不需要调用popen()执行外部命令,避免了命令注入风险,也不会因为系统命令版本差异导致输出解析失败。

内容的提问来源于stack exchange,提问作者김진영

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:07:53