首页 > 系统相关 >Linux 硬件相关命令

Linux 硬件相关命令

时间:2024-08-08 13:05:56浏览次数:15  
标签:查看 GPU 硬件 命令 内存 IO Linux 磁盘 CPU

※,Linux性能分析:https://www.cnblogs.com/bakari/p/10515977.html

★,之CPU篇

cpu个数、核数、线程数是cpu的三个重要概念。一般个人PC上只有一个物理cpu,服务器上可以有多个物理cpu。一个物理cpu可以有多个核(比如4核,8核等等);一个物理核可以使用超线程技术超出多个虚拟核(即线程),一般是一个物理核对应2个线程,比如4核8线程等等,但也有1个核对应更多线程的,比如IBM的power7处理器是8核32线程。

服务器67.27cpu情况: Intel(R) Xeon(R) Silver 4210R CPU @ 2.40GHz; 2颗物理cpu,每颗cpu是10核20线程,总共是2*20个线程。

  • ·lscpu· // 在 Linux 下,类似 lsxxx 这样的命令都是用来查看基本信息的,如 ls 查看当前目录文件信息,lscpu 就用来查看 CPU 信息,类似还有 lspci 查看 PCI 信息,lsmem查看内存信息。
  • ·cat /proc/cpuinfo· // /proc 目录是内核透传出来给用户态使用的,里面记录着很多信息文件,比如还有内存文件 meminfo 等。可以使用 cat /proc/cpuinfo 查看 CPU 信息。
    • 获取cpu型号,以及总线程数
      • `cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c`
    • 查看 CPU 物理个数: ·grep 'physical id' /proc/cpuinfo | sort -u | wc -l·
    • 查看 CPU 核心数量: ·grep 'core id' /proc/cpuinfo | sort -u | wc -l·(这里查到的是一颗物理cpu的核心数)
    • 查看 CPU 线程数: ·grep 'processor' /proc/cpuinfo | sort -u | wc -l·(这里查到的是所有物理cpu总的线程数,单颗cpu的线程数需要除以物理cpu的个数)
    • 查看 CPU  型号: ·dmidecode -s processor-version· // 可以通过输出的行数得出此机器有多少物理cpu个数。
    • 查看 CPU 的详细信息:·cat /proc/cpuinfo·
  • ·dmidecode· // 这个命令是用来获取 DMI(Desktop Management Interface)硬件信息的,包括 BIOS、系统、主板、处理器、内存、缓存等等。
    • `dmidecode -t processor`  //查看CPU信息
  • `top` //参看之前笔记.
    • 之后按1可以展开所有核数  
  • ·ps· // 参看之前笔记。
  • ·vmstat· // 这个命令基本能看出当前机器的运行状态和问题,非常强大。可以使用 ·vmstat n· 后面跟一个数字,表示每隔 ns 显示系统的状态,信息包括 CPU、内存和 IO 等。几个关键的字段: 
    • r 值:表示在 CPU 运行队列中等待的进程数,如果这个值很大,表示很多进程在排队等待执行,CPU 压力山大。
    • in 和 cs 值:表示中断次数和上下文切换次数,这两个值越大,表示系统在进行大量的进程(或线程)切换。切换的开销是非常大的,这时候应该减少系统进程(或线程)数。
    • us、sy、id、wa 值:这些值上面也提到过,分别表示用户空间进程,系统进程,空闲和 IO 等待的 CPU 占比,这里只有 id 很高是好的,表示系统比较闲,其他值飚高都不好。
  • `dstat` //这个命令也很强大,能显示 CPU 使用情况,磁盘 IO 情况,网络发包情况和换页情况,而且输出是彩色的,可读性比较强,相对于 vmstat 更加详细和直观。使用时可以直接输入命令,也可以带相关参数。

上面说的是系统级的分析,现在来看单个进程的 CPU 使用情况分析,以便于我们能对占用 CPU 过多的进程进行调试和分析,优化程序性能。

  • `pidstat` // 这个命令默认统计系统信息,也包括 CPU、内存和 IO 等,我们常用 pidstat -u -p pid [times] 来显示 CPU 统计信息。如下统计 pid = 802 的 CPU 信息
    • `pidstat -u -p 802 1`
  • `strace` // 这个命令用来分析进程的系统调用情况,可以看进程都调用了哪些库和哪些系统调用,进而可以进一步优化程序。比如我们分析 ls 的系统调用情况,就可以用 strace ls.
    • `strace -p 802` // attach(附着)到一个正在运行的进程上进行分析,比如我 attach 到 802 这个进程显示.
  • `perf` // 进阶工具
  • ·systemtap· //高级工具
  • ·kprobe· // 撸码工具

★,之内存篇

  • ·cat /proc/meminfo· // 我们比较关心的是下面几个字段:
    • MemTotal:系统总内存,由于 BIOS、内核等会占用一些内存,所以这里和配置声称的内存会有一些出入,比如我这里配置有 2G,但其实只有 1.95G 可用。
    • MemFree:系统空闲内存。
    • MemAvailable:应用程序可用内存。有人会比较奇怪和 MemFree 的区别,可以从两个层面来区分,MemFree 是系统层面的,而 MemAvailable 是应用程序层面的。系统中有些内存虽然被使用了但是有一部分是可以回收的,比如 Buffers、Cached 及 Slab 这些内存,这部分可以回收的内存加上 MemFree 才是 MemAvailable 的内存值,这是内核通过特定算法算出来的,是一个估算值。
    • Buffers:缓冲区内存
    • Cached:缓存
  • `free` //几个字段和上面 /proc/meminfo 的字段是对应的。还有个 shared 字段,这个是多进程的共享内存空间,不常用。
    • `free -h` //要看比较直观的值,可以加 -h 参数
    • MemTotal = used + free + buff/cache(单位 K)
    • 从应用程序的角度讲,Linux实际可用内存=free + buffer/cache。或者直接看available,两个值稍微有些差别。
    • 我们注意到 free 很小,buff/cache 却很大,这是 Linux 的内存设计决定的,Linux 的想法是内存闲着反正也是闲着,不如拿出来做系统缓存和缓冲区,提高数据读写的速率。但是当系统内存不足时,buff/cache 会让出部分来,非常灵活的操作。
  • ·dmidecode· // 同CPU分析
    • `dmidecode -t memory` // 查看内存
  • `vmstat` // 这个命令也是非常常用了。但对于内存,显示信息有限。它更多是用于进行系统全局分析和 CPU 分析。

进程内存使用情况分析:

  • ·top / htop· // 参见另一篇笔记
  • ·ps· //参见另一篇笔记
  • ·pmap· // ·pmap -x pid· 这个命令用于查看进程的内存映像信息,可以看到该进程内存被哪些库、哪些文件所占用,据此我们定位程序对内存的使用。几个字段介绍一下:
    • Address:占用内存的文件的内存起始地址。
    • Kbytes:占用内存的字节数。
    • RSS:实际占用内存大小。(Resident Set Size)。
    • Dirty:脏页大小。
    • Mapping:占用内存的文件,[anon] 为已分配的内存,[stack] 为程序堆栈
    • 最后的 total 为统计的总值。我们可以使用 pmap -x pid | tail -1 这样只显示最后一行,循环显示最后一行,达到监控该进程的目的。使用`while true; do pmap -x pid | tail -1; sleep 1; done`

高阶工具:

  • ·atop·
  • `memstat`
  • `Valgrind` // 对于内存泄漏有一个比较常用的检测工具

★,之IO篇:IO 和 存储密切相关,存储可以概括为磁盘,内存,缓存,三者读写的性能差距非常大,磁盘读写是毫秒级的(一般 0.1-10ms),内存读写是微妙级的(一般 0.1-10us),cache 是纳秒级的(一般 1-10ns)。但这也是牺牲其他特性为代价的,速度快的,价格越贵,容量也越小。IO 性能这块,我们更多关注的是读写磁盘的性能。

磁盘基本信息:

  • ·fdisk -l· // 小写L。查看所有已挂载和未挂载的磁盘信息,包括磁盘容量,扇区大小,IO 大小等信息,但不显示文件系统类型。
    • Linux系统的分区格式使用的是xyzN的格式,xy表示的是硬盘类型,比如sd表示是SCSI硬盘,z表示的是硬盘序号,第一块硬盘是a,第二块硬盘是b, 要查询Linux系统上有几块硬盘,只要注意这一点即可;N表示的是分区号。
    • 类似 /dev/mapper/centos-root 这样的磁盘其实是逻辑卷,不是物理磁盘。
    • fdisk命令会显示磁盘的字节大小(精确大小),显示的GB单位是按照1GB=1000MB计算的。
  • ·df -h· // 只可以查看已经挂载的磁盘使用情况。查看磁盘使用情况,通常看磁盘使用率。这里显示的G是以1024为进制的!!!
    • ·df -T· //  -T查看磁盘分区文件系统类型
    • [root@BJ01-KY-TOOL01 iflyer]# lsblk
      NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      sda               8:0    0   80G  0 disk 
      ├─sda1            8:1    0    1G  0 part /boot
      └─sda2            8:2    0   79G  0 part 
        └─centos-root 253:0    0   79G  0 lvm  /
      sdb               8:16   0  700G  0 disk /data1
      sr0              11:0    1 1024M  0 rom  
      [root@BJ01-KY-TOOL01 iflyer]# df -h
      Filesystem                      Size  Used Avail Use% Mounted on
      /dev/mapper/centos-root          79G  3.5G   76G   5% /
      devtmpfs                         32G     0   32G   0% /dev
      tmpfs                            32G     0   32G   0% /dev/shm
      tmpfs                            32G  3.3G   29G  11% /run
      tmpfs                            32G     0   32G   0% /sys/fs/cgroup
      /dev/sdb                        689G  358G  297G  55% /data1
      /dev/sda1                      1014M  143M  872M  15% /boot
      tmpfs                           6.3G     0  6.3G   0% /run/user/1000
      172.22.145.122:/data1/SongBank   27T   21T  6.4T  77% /data1/SongBank
      tmpfs                           6.3G     0  6.3G   0% /run/user/0
      ############关于devtmpfs和tmpfs###########
      tmpfs是建立在内存的虚拟文件系统,默认情况下最大占用内存一半大小的空间
      devtmpfs:http://www.mybatis.cn/archives/1639.html
  • ·lsblk· // 可以清晰的查看出主机上有几块磁盘(包括挂载的和未挂载的)。这里显示的单位都是计算机标准单位,即按照1GB=1024MB计算的。
    • ·lsblk -f· // 显示文件系统类型.
  • ·blkid· // blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询
  • ·parted -l·  // 可以查看未挂载的文件系统类型,以及哪些分区尚未格式化.
  • ·file [OPTION...] [FILE...]· // Determine type of FILEs. file命令可以查看文件的类型。
    • ·file -s /dev/sda3· // file命令的-s参数可以treat special (block/char devices) files as ordinary ones。可以查看磁盘的分区文件系统类型。
  • 判断磁盘是机械硬盘还是固态硬盘
    • ·cat /sys/block/sdb/queue/rotational· // 0代表固态盘,1代表机械盘
    • ·lsblk -d -o name,rota· // 参数 -d 表示显示设备名称,参数 -o 表示仅显示特定的列。 rota值为1代表机械盘,0代表固态盘。

磁盘性能分析:主要分析磁盘的读写效率IOPS:每秒读写的次数;吞吐量:每秒读写的数据量),IO 繁忙程度,及 IO 访问对 CPU 的消耗等性能指标。

  • ·vmstat· // 对于 IO,我们常关注三个部分:一般这几个值偏大,都意味着系统 IO 的消耗较大,对于读请求较大的服务器,b、bo、wa 的值偏大,而写请求较大的服务器,b、bi、wa 的值偏大。
    • b 值:表示因为 IO 阻塞排队的任务数
    • bi 和 bo 值:表示每秒读写磁盘的块数,bi(block in)是写磁盘,bo(block out)是读磁盘。
    • wa 值:表示因为 IO 等待(wait)而消耗的 CPU 比例。
  • `iostat`
    查看代码
    vmstat 虽然万能,但是它分析的东西有限,iostat 是专业分析 IO 性能的工具,可以方便查看 CPU、网卡、tty 设备、磁盘、CD-ROM 等等设备的信息,非常强大,总结下来,共有以下几种用法:
    1)iostat -c 查看部分 CPU 使用情况:
    这里显示的是多个 CPU 的平均值,每个字段的含义我就不多解释了,我一般会重点关注 %iowait 和 %idle,分别表示 CPU 等待 IO 完成时间的百分比和 CPU 空闲时间百分比。
    如果 %iowait 较高,则表明磁盘存在 IO 瓶颈,如果 %idle 较高,则 CPU 比较空闲,如果两个值都比较高,则有可能 CPU 在等待分配内存,瓶颈在内存,此时应该加大内存,如果 %idle 较低,则此时瓶颈在 CPU,应该增加 CPU 资源。
    2)iostat -d 查看磁盘使用情况,主要是显示 IOPS 和吞吐量信息(-k : 以 KB 为单位显示,-m:以 M 为单位显示):
    其中,几个参数分别解释如下:
    tps:设备每秒的传输次数(transfers per second),也就是读写次数。
    kB_read/s 和 kB_wrtn/s:每秒读写磁盘的数据量。
    kB_read 和 kB_wrtn:读取磁盘的数据总量。
    3)iostat -x 查看磁盘详细信息:其中,几个参数解释如下;
    rrqm/s 和 wrqm/s:分别每秒进行合并的读操作数和写操作数,这是什么意思呢,合并就是说把多次 IO 请求合并成少量的几次,这样可以减小 IO 开销,buffer 存在的意义就是为了解决这个问题的。
    r/s 和 w/s:每秒磁盘读写的次数。这两个值相加就是 tps。
    rkB/s 和 wkB/s:每秒磁盘读写的数据量,这两个值和上面的 kB_read/s、kB_wrnt/s 是一样的。
    avgrq-sz:平均每次读写磁盘扇区的大小。
    avgqu-sze:平均 IO 队列长度。队列长度越短越好。
    await:平均每次磁盘读写的等待时间(ms)。
    svctm:平均每次磁盘读写的服务时间(ms)。
    %util:一秒钟有百分之多少的时间用于磁盘读写操作。
    以上这些参数太多了,我们并不需要每个都关注,可以重点关注两个:
    a. %util:衡量 IO 的繁忙程度
    这个值越大,说明产生的 IO 请求较多,IO 压力较大,我们可以结合 %idle 参数来看,如果 %idle < 70% 就说明 IO 比较繁忙了。也可以结合 vmstat 的 b 参数(等待 IO 的进程数)和 wa 参数(IO 等待所占 CPU 时间百分比)来看,如果 wa > 30% 也说明 IO 较为繁忙。
    b. await:衡量 IO 的响应速度
    通俗理解,await 就像我们去医院看病排队等待的时间,这个值和医生的服务速度(svctm)和你前面排队的人数(avgqu-size)有关。如果 svctm 和 await 接近,说明磁盘 IO 响应时间较快,排队较少,如果 await 远大于 svctm,说明此时队列太长,响应较慢,这时可以考虑换性能更好的磁盘或升级 CPU。
    4)iostat 1 2 默认显示 cpu 和 吞吐量信息,1 定时 1s 显示,2 显示 2 条信息

进程IO性能分析:有了以上两个命令,基本上能对磁盘 IO 的信息有个全方位的了解了。但如果要确定具体哪个进程的 IO 开销较大,这就得借助另外的工具了。

  • ·iotop· 

★,之网络篇:`yum provides $(which ping)` //查看ping命令属于哪个包。

  • ping:测试网络连通性
  • ifconfig:接口配置
  • ip:网络接口统计信息
  • netsat:多种网络栈和接口统计信息
  • ifstat:接口网络流量监控工具
  • netcat:快速构建网络连接
  • tcpdump:抓包工具
  • sar:统计信息历史
  • traceroute:测试网络路由
  • pathchar:确定网络路径特征
  • dtrace:TCP/IP 栈跟踪
  • iperf / netperf / netserver:网络性能测试工具
  • perf 性能分析神器

★,之显卡篇

  • lspci | grep -i vga //Linux查看显卡信息
  • lspci | grep -i nvidia //英伟达显卡
    (base) [root@master25 ~]$lspci |grep -i nvi
    3b:00.0 VGA compatible controller: NVIDIA Corporation Device 2208 (rev a1) //这个是nvidia 3080TI显卡
    3b:00.1 Audio device: NVIDIA Corporation Device 1aef (rev a1)

    由于没有驱动信息,无法查询显卡的具体型号,不过可以通过nvidia官方网站查询。将上面输出中的代号(2208 或 1aef)输入文本框即可。

  • lspci -v -s 3b:00.0 //查看指定显卡的详细信息。3b:00.0是显卡代号,lspci的输出最前面即是此信息。
  • sudo lshw -c  display// 查看显卡信息
    • -c后的值可以通过 lshw -short获取
  • nvidia-smi // Nvidia自带一个命令行工具可以查看显存的使用情况。`nvidia-smi --help`
    [root@167 ~]$nvidia-smi
    Fri Feb 10 16:11:31 2023       
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 515.86.01    Driver Version: 515.86.01    CUDA Version: 11.7     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  NVIDIA GeForce ...  Off  | 00000000:3B:00.0 Off |                  N/A |
    | 30%   32C    P8    25W / 350W |    234MiB / 12288MiB |      0%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
                                                                                   
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    |    0   N/A  N/A      1302      G   /usr/lib/xorg/Xorg                217MiB |
    |    0   N/A  N/A      1594      G   /usr/bin/gnome-shell               15MiB |
    +-----------------------------------------------------------------------------+
    
    表头释义:
    
    Fan:显示风扇转速,数值在0到100%之间,是计算机的期望转速,如果计算机不是通过风扇冷却或者风扇坏了,显示出来就是N/A;
    Temp:显卡内部的温度,单位是摄氏度;
    Perf:表征性能状态,从P0到P12,P0表示最大性能,P12表示状态最小性能;
    Pwr:能耗表示;
    Bus-Id:涉及GPU总线的相关信息;
    Disp.A:是Display Active的意思,表示GPU的显示是否初始化;
    Memory Usage:显存的使用率;
    Volatile GPU-Util:浮动的GPU利用率;
    Compute M:计算模式;
    下边的Processes显示每块GPU上每个进程所使用的显存情况。
    • ·nvidia-smi -L· // 列出所有可用的Nvidia设备。可以输出显卡型号,如RTX3080Ti
      [root@167 ~]$nvidia-smi -L
      GPU 0: NVIDIA GeForce RTX 3080 Ti (UUID: GPU-96bfb1d3-986f-e92a-4f68-a600bd8a144c)
  • 在Linux上,您可以将GPU设置为持久模式nvidia-smi -pm 1。持久模式每个闲置的GPU使用更多的功率,但是可以防止每次启动GPU应用程序时出现相当长的延迟。在Windows上,nvidia-smi无法设置持久性模式。 相反,您需要将计算GPU设置为TCC模式。 这应该通过NVIDIA的图形GPU设备管理面板来完成。

    执行 nvidia-smi 命令,可查看Persistence Mode当前状态。Persistence-M的值为On时,持续模式为打开状态,如下图所示:

※,

标签:查看,GPU,硬件,命令,内存,IO,Linux,磁盘,CPU
From: https://www.cnblogs.com/everest33Tong/p/18348716

相关文章

  • 初见linux
    一,  UNIX/Linux中一切皆文件!  /在linux中为分隔符,windows中\为分隔符。  注:在终端中除第一次出现的/被视作根目录往后皆是分隔。  eg:/usr/include/stdio.h其表示的意思是根目录下的usr目录中的include目录里的stdio.h文件。  /根目录  所有文件都在它下面 ......
  • 网卡与Linux网络结构(上)
    原本是想借着之前学习的中断进一步拓展到网卡与中断的,标题都写好了,结果低估了其中的知识面和难度。。。。。于是调整为了网卡与Linux网络结构(上),没错,仅仅只是上。。。我还是进一步低估了学习需要花费的时间,网络这块的确是弱项,以前都是死记硬背TCP的三次握手、四次挥手,这次正好......
  • linux 虚拟机有线网络消失解决方案汇总.18348485
    修复Linux虚拟机有线网络消失的解决方案汇总的一些操作(后续可能会更新)第一种方法:删除var/lib/NetworkManager/文件夹(自测Centos系统有用)1.打开终端,输入以下命令:cd/var/lib2.查询有无文件夹:findNetworkManager3.删除文件夹:rm-rfNetworkManager/4.重启。5.使......
  • 【北京迅为】《stm32mp157开发板嵌入式linux开发指南》第四章 Ubuntu 启用 root 用户
         iTOP-STM32MP157开发板是基于意法半导体STARM双Cortex-A7核加单Cortex-M4核的一款多核异构处理器。Cortex-A7内核提供对开源操作系统Linux的支持,借助Linux系统庞大而丰富的软件组件处理复杂应用。M4内核上运行对于实时性要求严格的应用。        开发板既有......
  • Linux中可怕的fork炸弹
    什么是Linux中的Fork炸弹Linux中的Fork炸弹(ForkBomb)是一种拒绝服务攻击的形式,它利用了操作系统中的“fork()”系统调用。Fork()系统调用用于创建新进程,该进程是调用进程的副本。Fork炸弹利用此系统调用创建大量的子进程,以消耗系统资源,例如内存和CPU时间,从而使系统不可用。要实......
  • windows平台中使用vscode远程连接linux进行c++开发配置教程(内容详细适合小白)-2021-3-3
    文章目录一、简要介绍二、软件安装步骤1.linux系统安装2.vscode安装3.ssh安装4.配置Remote-SSH5.安装远程插件6.简单小测试三、配置vscode开发环境1.默认设置、用户设置、远程设置和工作区设置2.c++开发设置a).c_cpp_properties.jsonb).tasks.jsonc).launc......
  • GIT常用命令
     gitbranch查看本地所有分支gitstatus查看当前状态gitcommit提交gitbranch-a查看所有的分支gitbranch-r查看本地所有分支gitcommit-am"init"提交并且加注释gitremoteaddorigin地址gitpushoriginmaster将文件给推到服务器上gitremoteshow......
  • 一个大坑!使用Jmeter5.X通过命令行方式运行脚本,可能会出现samples数量统计翻几倍的情况
    最近使用Jmeter5.4.1进行了接口测试,发现了一个诡异的问题,在这里跟大家分享一下这个问题从debug到解决的过程,避免大家踩坑!诡异问题记录通过命令行运行jmeterjmeter-n-tC:\Users\XK-ADMIN\Desktop\test.jmx -lC:\software\result1.jtl-e-oC:\software\result1测试......
  • Linux shell脚本案例:使用正则表达式匹配目录并定时删除日期早于当前系统日期的所有目
    实现每周三和每周日执行清理/NFS目录的任务,你可以使用shell脚本结合cron定时任务。下面是一个示例脚本,它会删除/NFS目录下所有名称形如XBK_FULL_YYYYMMDDHHMMSS和XBK_INCR_YYYYMMDDHHMMSS的目录,其中日期早于当前系统日期。步骤1:创建Shell脚本创建脚本......
  • 离线win/mac下vscode客户端通过ssh连接linux服务器
    1、下载vscode,这个网上教程一大堆就不一一介绍了,自行百度建议安装蓝色的版本,最后图标是蓝色的。下载网址:VisualStudioCode-CodeEditing.Redefined2、win系统或mac系统安装openssh,这个也一大堆教程,可以自行百度3、安装vscode插件下载网址:ExtensionsforVisual......