Linux系统下获取系统、BIOS、进程、网络等相关信息的方法和工具

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、引言

在实时音视频场景中获取系统、应用进程和BIOS信息是非常重要的。这些信息可以帮助测试人员直观地了解测试设备和进程的性能从而更好地进行测试和优化。此外这些信息还可以为进一步的数据挖掘和Top机型挖掘提供素材为设备和应用的开发提供有力支持。

在Linux系统中获取这些信息不像其他操作系统那样有简单易用的工具例如Windows的SDK而是非常分散和碎片化几乎没有现成的工具可用。

首先我们应该优先使用Linux API来获取相关信息。Linux API提供了很多接口可以方便地获取系统和应用进程信息。如果没有相关API可用我们可以查找是否有相关的文件系统通过读取文件来获取信息。例如/sys/etc和/proc文件系统。最后如果以上方法都无法获取所需信息我们才考虑通过管道执行命令来获取信息。但这种方法不仅效率低下而且容易出现安全问题因此应该尽量避免使用。

总之在获取Linux系统、应用进程和BIOS信息时我们应该遵循优先使用Linux API其次是读取文件系统最后才考虑通过管道执行命令的原则。这样可以保证获取信息的高效性和安全性。

二、系统信息

本节介绍获取系统相关信息的工具和方法包括

1. 操作系统发行版信息

读取/etc/os-release配置文件可以获得有关操作系统发行版、版本和其他相关细节的信息被广泛应用于确定特定的Linux发行版及其属性我们通常更关注PRETTY_NAME参数因为它通常会覆盖Linux桌面特有发行版的名称和版本号。下面的表格列出了三个不同设备的配置信息包括常用的桌面发行版Ubuntu、国产化Linux操作系统UOS以及嵌入式场景下的树莓派。

工具

ubuntu 18.04 台式机

ubuntu 22.04 笔记本

UOS国产化机器

树莓派

/etc/os-release

NAME="Ubuntu" VERSION="18.04.6 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.6 LTS" VERSION_ID="18.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=bionic UBUNTU_CODENAME=bionic

PPRETTY_NAME="Ubuntu 22.04.1 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.1 LTS (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=jammy

PRETTY_NAME="UnionTech OS Desktop 20 Pro" NAME="uos" VERSION_ID="20" VERSION="20" ID=uos HOME_URL="https://www.chinauos.com/" BUG_REPORT_URL="http://bbs.chinauos.com" VERSION_CODENAME=eagle

PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)" NAME="Raspbian GNU/Linux" VERSION_ID="9" VERSION="9 (stretch)" ID=raspbian ID_LIKE=debian HOME_URL="http://www.raspbian.org/" SUPPORT_URL="http://www.raspbian.org/RaspbianForums" BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

2. 主机信息

读取/etc/hostname配置文件即可获得主机名。

工具

ubuntu 18.04 台式机

ubuntu 22.04 笔记本

UOS国产化机器

树莓派

/etc/hostname

ubuntu-Precision-3630-Tower

test-ThinkPad-Edge-E440

uos-PC

raspberrypi

3. 内核信息

使用uname工具可以方便获取内核相关的信息包括版本及架构等等。

工具

ubuntu 18.04 台式机

ubuntu 22.04 笔记本

UOS国产化机器

树莓派

uname -a

内核信息

Linux ubuntu-Precision-3630-Tower 5.4.0-132-generic #148~18.04.1-Ubuntu SMP Mon Oct 24 20:41:14 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

Linux test-ThinkPad-Edge-E440 5.15.0-52-generic #58-Ubuntu SMP Thu Oct 13 08:03:55 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

Linux uos-PC 4.19.71-arm64-desktop #51.57016 SMP PREEMPT Mon Jan 17 13:10:41 CST 2023 aarch64 GNU/Linux

Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux

uname API (推荐)

sysname

系统名

Linux

Linux

Linux

Linux

release

系统版本号

5.4.0

5.19.0

4.19.71

4.14.98

machine

架构

x86_64

x86_64

aarch64

armv7

4. CPU信息

读取/cpu/cpuinfo文件以获取CPU型号优先读取model name若不存在则读取Hardware。注意使用sysconf API获取到的是CPU的逻辑核心数而不是物理核心数获得cpu核心数主要可以指导我们进行线程优化。

工具

ubuntu 18.04 台式机

ubuntu 22.04 笔记本

UOS国产化机器

树莓派

/proc

/proc/cpuinfo

model name

Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz

Intel(R) Core(TM) i5-4210M CPU @ 2.60GHz

Hardware

HUAWEI Kirin 990

BCM2835

sysconf(_SC_NPROCESSORS_CONF)

CPU Processors

12

4

4

4

三、BIOS信息

本节介绍主板和BIOS相关信息的获取注意只有Linux桌面系统才能获取该信息。

工具

ubuntu 18.04 台式机

ubuntu 22.04 笔记本

UOS国产化机器

树莓派

DMI/

SMBIOS

/sys/class/dmi/id/bios_vendor

BIOS制造商

Dell Inc.

LENOVO

Byosoft

/sys/class/dmi/id/board_name

主板名

0Y2K8N

20C5A084CD

SP1KVUM

/sys/class/dmi/id/board_vendor

主板制造商

Dell Inc.

LENOVO

HUAWEI

/sys/class/dmi/id/product_name

产品名

Precision 3630 Tower

20C5A084CD

L410 KLVU-WDU0

用/proc/device-tree/model替代

Raspberry Pi 3 Model B Plus Rev 1.3

/sys/class/dmi/id/product_version

产品版本

空白

ThinkPad Edge E440

L410

四、进程信息

本节介绍进程最关键的两个性能指标信息获取包括CPU占用率和内存使用。

1. cpu占用率

详见文章《linux系统下如何获取进程和系统的cpu占用率》

 步骤

  1. 从/proc/pid/stat文件中提取进程的CPU时间信息。
  2. 从/proc/stat文件中提取系统的CPU时间信息。
  3. 在一定间隔时间内即统计周期重复执行步骤1和2。
  4. 根据两次结果计算出统计周期内进程和系统的CPU占用率

这里介绍下/proc/pid/stat和/proc/stat的的内容

  • /proc/pid/stat

pid comm state ppid pgrp session tty_nr tpgid flags minflt cminflt majflt cmajflt utime stime cutime cstime priority nice num_threads itrealvalue starttime vsize rss rsslim startcode endcode startstack kstkesp kstkeip signal blocked sigignore sigcatch wchan nswap cnswap exit_signal processor rt_priority policy delayacct_blkio_ticks guest_time cguest_time

可以计算出某一时刻进程总的消耗的cpu时间

T= Tutime + Tstime + Tcutime + Tcstime

utime用户态运行时间

stime 内核态运行时间

cutime子进程用户态运行时间

cstime子进程内核态运行时间

  • /proc/stat

cpu user nice system idle iowait irq softirq steal guest guest_nice

cpu0 user nice system idle iowait irq softirq steal guest guest_nice

cpu1 user nice system idle iowait irq softirq steal guest guest_nice

可以计算出某一时刻系统总的的cpu时间Ttotal和消耗的cpu时间Twork:

Ttotal = Tuser + Tnice + Tsystem + Tidle

Twork = Tuser + Tnice + Tsystem

user进程在用户态运行的时间

nice进程在低优先级用户态运行的时间

system进程在内核态运行的时间。

idleCPU 空闲的时间。

计算统计周期内的时间差值可以得出相应的时间从而计算出CPU占用率。需要注意的是由于我们计算的是占用率所以不必关注时间单位。

2. 内存使用

可以通过读取/proc/pid/status文件中的VmRSS字段值来获取指定进程实际使用的物理内存单位为kB。

# proc/pid/status 部分内容
Name:   demo
Umask:  0002
State:  S (sleeping)
Tgid:   11253
Ngid:   0
Pid:    11253
PPid:   10679
TracerPid:      0
Uid:    1000    1000    1000    1000
Gid:    1000    1000    1000    1000
FDSize: 256
Groups: 4 24 27 30 46 116 126 1000
NStgid: 11253
NSpid:  11253
NSpgid: 10679
NSsid:  10077
VmPeak:  6071984 kB
VmSize:  5924488 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:    164040 kB
VmRSS:    164040 kB
RssAnon:           61064 kB
RssFile:          102976 kB
RssShmem:              0 kB

五、网络信息

详见文章《基于netlink的Linux Network Monitor实现》

六、总结

Linux系统下可以使用API和内核通信或者直接读取文件系统来获取所需信息。此外还有一些命令行工具可供使用但我们建议优先使用API和文件系统。通过获取设备的一些静态信息例如系统和BIOS信息可以帮助我们挖掘Top机型。通过进程和网络等动态信息可以指导我们进行应用性能测试和优化实践。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux