在实际应用中,会有很多系统参数的运行监控手段,我也曾经遇到过监控操作系统cpu,内存和网卡的发送接收速率等场景(使用snmp协议采集,也可以使用prometheus监控器去采集)。

    另外,京东的RPC框架中有种动态负载均衡策略,就是根据节点健康度进行请求分配的算法,底层也是采集系统参数,根据加权算法得到机器节点到健康度。

      今天那就一起总结一下常用的Linux系统参数获取方式,比如cpu核数,用户名,内存参数等等。

1、获取当前cpu核数

       在Netty中默认工作线程数量就是CPU核数的2倍,cpu核数可以通过sysconf函数可以查询相关参数,我们先通过man sysconf查看看函数用法。

zabbix 监控内存 cpu 监控系统cpu_监控组件

      其中的参数int name,我们接着看看有哪些参数。

zabbix 监控内存 cpu 监控系统cpu_zabbix 监控内存 cpu_02

        最后实现查询cpu核数的接口如下:

zabbix 监控内存 cpu 监控系统cpu_系统参数_03

2、获取主机的hostname

     获取主机名称很容易,在头文件中有gethostname函数可以直接获取。

zabbix 监控内存 cpu 监控系统cpu_监控组件_04

3、获取系统内存使用情况

    我们知道,通过cat /proc/meminfo 可以打开这个文件,里面可以查看到内存相关的信息。

zabbix 监控内存 cpu 监控系统cpu_监控组件_05

    那我们只需要通过文件到open接口读取内容,然后解析即可。

zabbix 监控内存 cpu 监控系统cpu_zabbix 监控内存 cpu_06

    其中,__parse_mem_info_attr_from_content方法,就是从这个字符串中找到对应的参数,然后进行解析。这个参数将作为工具方法,整个类中将使用到。

zabbix 监控内存 cpu 监控系统cpu_系统启动_07

4、获取系统启动/运行时间

    通过 cat /proc/stat 通用可以查看到系统运行的一些信息,如下所示:

zabbix 监控内存 cpu 监控系统cpu_网卡信息_08

    那么系统启动时间就是上面的btime,系统运行的时间就是当前时间减去btime结果。

zabbix 监控内存 cpu 监控系统cpu_网卡信息_09

    那么最终封装实现后的接口函数如下:

zabbix 监控内存 cpu 监控系统cpu_网卡信息_10

5、获取全部网卡信息

       获取本机全部网卡信息,可以通过socket方式获取,如下所示:

zabbix 监控内存 cpu 监控系统cpu_网卡信息_11

6、网卡收发包/速率参数获取

    同样,使用cat /proc/net/dev可以查看到有两个网卡的信息,其中我们需要获取的是ens33网卡的信息,所以在下面调用接口需要传入网卡名称(网卡名称有上面的api获取到了)。

zabbix 监控内存 cpu 监控系统cpu_网卡信息_12

    我们通过一个内部类netdev来实现该功能:

zabbix 监控内存 cpu 监控系统cpu_系统参数_13

    这个地方,有个技巧,就是我们只需要得到其中的Receive和Transmit中的Bytes,所以上面的函数中,我们使用了dummy变量,跳过了中间变量得到了in_bytes和out_bytes结果。