功能 #4959
系统资源的获取监控优化(arm)
0%
描述
对于系统的访问,由于命令行执行的性能消耗比较大,对于执行频繁的命令行代码,尽量替换为api实现或直接去/proc下获取的方式
历史记录
由 李 玮璇 更新于 20 天 之前
- 状态 从 新建 变更为 进行中
排查后可优化如下(建议):
1、替代 free -h:使用 sysinfo() 或读取 /proc/meminfo ——1s
2、替代 df -k:使用 statvfs() 或 statfs()——600s,且很多地方多次调用,有的在列表循环中调用
3、替代 du -sm:使用 nftw() 或递归 stat()——30分钟多次,在监控列表循环中调用
4、" cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | wc -l"=》标准库函数 sysconf()——初始化频率不高
5、chmod a+r 或者给权限x或者644等=》调用 POSIX 函数 chmod(),它声明在 <sys/stat.h> 中(频率不高后续频率高了再优化)
6、kill -9 POSIX 标准提供了 kill() 函数,声明在 <signal.h>(目前只有AgentRestart用了不频繁)
7、KillProcess pgrep -x kill -9=》修改为系统函数(目前只有AgentRestart用了不频繁)
由 李 玮璇 更新于 20 天 之前
修改点1:
cat /proc/meminfo
MemTotal:[Mem.MemTotal]
MemFree:[Mem.MemFree]
Mem.used = total - free - buff/cache[Mem.free]完整模拟法
Shmem:[Mem.shared]
Buffers: -
Cached: |[Mem.buff/cache]=Buffers+Cached+SReclaimable
SReclaimable: -
MemAvailable:[Mem.MemAvailable]
SwapTotal:[Swap.total]
SwapFree:[Swap.free]
Swap.used = total - free
由 李 玮璇 更新于 19 天 之前
修改点3:
递归 stat()替代 du -sm,同du -sb命令精细到真实字节
解释:
du -sb /data/log/binlog 可显示真实字节数(逻辑大小)包含目录本身
du -sm /data/log/binlog 2> /dev/null 单位MiB向上取整(物理磁盘大小)
ls -l 不包含目录本身大小
测试结果:
程序中:path:/data/log/binlog, totalBytes:12288 File:HardwareInfo.cpp, LineNo:281, Func:GetHDSizeByStat
shell命令du -sb /data/log/binlog查询:12288 /data/log/binlog
测试结果:
修改后新优化逻辑稳定,小目录基本不耗时0ms,大目录耗时稳定,长时间测试比原逻辑耗时可能还少
注意:
du(默认无参数 或 -m / -h):统计的是 物理磁盘占用(即 st_blocks)。
du -b / du --bytes:这是 GNU 扩展参数,它的含义是 --apparent-size --block-size=1,也就是强制让 du 去统计 逻辑大小(st_size),而不是物理占用。
结论:
du -sb 是 du 命令中唯一一个统计逻辑大小的情况。除此之外,du(包括你一开始用的 du -sm)全部统计物理磁盘占用。
由 李 玮璇 更新于 17 天 之前
修改点2:
“df -k”命令替换为获取/proc/mounts, 查找路径所属的挂载点,然后利用statvfs查询信息
系统查询:
root@driver:/yzmm/gnb/baseService/bin# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 996780 440260 487708 48% /
devtmpfs 6524944 0 6524944 0% /dev
tmpfs 6697640 188 6697452 1% /dev/shm
tmpfs 6697640 16748 6680892 1% /run
tmpfs 5120 0 5120 0% /run/lock
tmpfs 6697640 0 6697640 0% /sys/fs/cgroup
tmpfs 307200 548 306652 1% /memdisk
/dev/mmcblk0p7 61611820 1253956 57195752 3% /data
/dev/mmcblk0p6 20466256 1930360 17470936 10% /coredump
/dev/mmcblk0p5 16337788 1481560 14000984 10% /yzmm
tmpfs 1339528 0 1339528 0% /run/user/0
程序测试:
Line 774: 2026-06-25T03:17:12.069 ERROR [17368] ----------------------lwx test:/data/core-------------------------- File:RunLogRec.cpp, LineNo:955, Func:FreeHDSizebyPath
Line 775: 2026-06-25T03:17:12.069 ERROR [17368] ---lwx test:pos:1info:/dev/mmcblk0p7 File:HardwareInfo.cpp, LineNo:271, Func:GetHDInfoByStatvfs
Line 776: 2026-06-25T03:17:12.070 ERROR [17368] ---lwx test:pos:2info:61611820 File:HardwareInfo.cpp, LineNo:271, Func:GetHDInfoByStatvfs
Line 777: 2026-06-25T03:17:12.070 ERROR [17368] ---lwx test:pos:3info:1253956 File:HardwareInfo.cpp, LineNo:271, Func:GetHDInfoByStatvfs
Line 778: 2026-06-25T03:17:12.070 ERROR [17368] ---lwx test:pos:4info:57195752 File:HardwareInfo.cpp, LineNo:271, Func:GetHDInfoByStatvfs
Line 779: 2026-06-25T03:17:12.070 ERROR [17368] ---lwx test:pos:5info:3% File:HardwareInfo.cpp, LineNo:271, Func:GetHDInfoByStatvfs
Line 780: 2026-06-25T03:17:12.070 ERROR [17368] ---lwx test:pos:6info:/data File:HardwareInfo.cpp, LineNo:271, Func:GetHDInfoByStatvfs
Line 783: 2026-06-25T03:17:12.070 ERROR [17368] ----------------------lwx test:/var/log-------------------------- File:RunLogRec.cpp, LineNo:955, Func:FreeHDSizebyPath
Line 784: 2026-06-25T03:17:12.071 ERROR [17368] ---lwx test:pos:1info:/dev/root File:HardwareInfo.cpp, LineNo:271, Func:GetHDInfoByStatvfs
Line 785: 2026-06-25T03:17:12.071 ERROR [17368] ---lwx test:pos:2info:996780 File:HardwareInfo.cpp, LineNo:271, Func:GetHDInfoByStatvfs
Line 786: 2026-06-25T03:17:12.071 ERROR [17368] ---lwx test:pos:3info:440260 File:HardwareInfo.cpp, LineNo:271, Func:GetHDInfoByStatvfs
Line 787: 2026-06-25T03:17:12.071 ERROR [17368] ---lwx test:pos:4info:487708 File:HardwareInfo.cpp, LineNo:271, Func:GetHDInfoByStatvfs
Line 788: 2026-06-25T03:17:12.071 ERROR [17368] ---lwx test:pos:5info:48% File:HardwareInfo.cpp, LineNo:271, Func:GetHDInfoByStatvfs
Line 789: 2026-06-25T03:17:12.071 ERROR [17368] ---lwx test:pos:6info:/ File:HardwareInfo.cpp, LineNo:271, Func:GetHDInfoByStatvfs