Linux- /proc

前言

proc 是 Processes(进程) 的缩写,/proc 是一个伪文件系统(或者叫做虚拟文件系统),位于系统内存中, 存储着记录当前内核运行状态的一系列特殊文件, 如系统内存、磁盘IO、设备挂载信息和硬件配置信息等。可通过直接访问 /proc 来获取内核状态信息,也可通过修改其中某些文件,来改变内核的运行状态,如:

  • 如查询 /proc/meminfo 获取内存相关信息

  • 如屏蔽主机的ping命令,只需设置 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

常用项目

名称 类型    含义
数字编号 目录 这是以进程PID为名称的目录, 存放与该进程相关的信息
/proc/cmdline 文件 在启动时传递至内核的相关参数信息,在 Ubuntu 中,是通过 grub 启动管理工具进行传递
/proc/cpuinfo 文件 CPU 的相关信息,包含频率、类型与运算功能等
/proc/meminfo 文件 当前内存的利用状况等的信息,free 命令正是使用这个信息
/proc/version 文件 当前系统运行的内核版本号
/proc/buddyinfo 文件 每个内存区中的每个order有多少块可用,可用于诊断内存碎片问题
/proc/self 文件 获取当前进程信息, 相当于 /proc/{当前进程pid}/
/proc/modules 文件 已载入的模块列表, 即驱动程序的载入情况,命令 lsmod 的数据源
/proc/swaps 文件 交换空间使用情况
/proc/partitions 文件 磁盘分区情况 fdisk 数据源
/proc/kmsg 文件 内核生成的信息(开机信息),命令 dmesg 数据源
/proc/sys 目录 存储放着一系列的系统内核变量,可访问、有一些还可修改

/proc/cpuinfo

  • 监控cpu频率
    watch -n .1 "grep \"^[c]pu MHz\" /proc/cpuinfo"
    
    walkerjun@walkerjun:~$ grep "^[c]pu MHz" /proc/cpuinfo
    cpu MHz		: 2900.000
    cpu MHz		: 2900.000
    cpu MHz		: 2900.000
    cpu MHz		: 2900.000
    cpu MHz		: 1417.604
    cpu MHz		: 2900.000
    cpu MHz		: 2900.000
    cpu MHz		: 2900.000
    cpu MHz		: 633.883
    cpu MHz		: 2900.000
    cpu MHz		: 2900.000
    cpu MHz		: 2900.000
    cpu MHz		: 2754.045
    cpu MHz		: 2520.458
    cpu MHz		: 2900.000
    cpu MHz		: 2900.000
    cpu MHz		: 2900.000
    cpu MHz		: 2900.000
    cpu MHz		: 2900.000
    cpu MHz		: 2900.000
    

/proc/meminfo

  • 字段含义
    walkerjun@walkerjun:~$ cat /proc/meminfo
    MemTotal:       16078392 kB  # 总可用物理内存 (减去极少的预留位和内核二进制代码占用)
    MemFree:         6161668 kB  # 空闲的物理内存
    MemAvailable:   10189896 kB  # 估算值,启动一个新程序的可使用内存,约等于 MemFree + Buffers + Cached
    Buffers:          231608 kB  # 用于写入磁盘的缓存大小,通常不太大 20MB 左右,目的:降低磁盘写入频率, 降低磁盘负荷,延长磁盘寿命
    Cached:          5259472 kB  # 用于读取磁盘文件的缓存大小,不包含SwapCached。 目的:减少磁盘IO,提升数据获取速度 (用空间换时间)
    SwapCached:            0 kB  # 已经被交换出来,但是仍然存在于交换空间的内存。目的:因为内存仍存在于交换空间,当再次有交换出需求时,可减少重复的交换,降低磁盘 IO
    Active:          1863228 kB  # 最近被经常使用的内存大小
    Inactive:        6195312 kB  # 最近不被经常使用的内存大小,有可能会被系统挪作它用
    Active(anon):       6836 kB  # 
    Inactive(anon):  3896960 kB  #
    Active(file):    1856392 kB  #
    Inactive(file):  2298352 kB  #
    Unevictable:     1108392 kB  #
    Mlocked:           13216 kB  #
    SwapTotal:      31999996 kB  # 总可用交换空间大小
    SwapFree:       31999996 kB  # 空闲交换空间大小
    Zswap:                 0 kB  #
    Zswapped:              0 kB  #
    Dirty:               136 kB  # 等待写回磁盘的内存大小
    Writeback:             0 kB  # 正在写回磁盘的内存的大小
    AnonPages:       3676448 kB
    Mapped:           935024 kB
    Shmem:           1340292 kB
    KReclaimable:     218048 kB
    Slab:             455640 kB
    SReclaimable:     218048 kB
    SUnreclaim:       237592 kB
    KernelStack:       29408 kB
    PageTables:        60708 kB
    SecPageTables:         0 kB
    NFS_Unstable:          0 kB
    Bounce:                0 kB
    WritebackTmp:          0 kB
    CommitLimit:    40039192 kB
    Committed_AS:   18608000 kB
    VmallocTotal:   34359738367 kB
    VmallocUsed:       77468 kB
    VmallocChunk:          0 kB
    Percpu:            22560 kB
    HardwareCorrupted:     0 kB
    AnonHugePages:         0 kB
    ShmemHugePages:  1003520 kB
    ShmemPmdMapped:        0 kB
    FileHugePages:         0 kB
    FilePmdMapped:         0 kB
    HugePages_Total:       0
    HugePages_Free:        0
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
    Hugetlb:               0 kB
    DirectMap4k:      263168 kB
    DirectMap2M:     3651584 kB
    DirectMap1G:    12582912 kB
    

/proc/{{PID}}

  • /proc 下有很多以PID为名的目录, 存放与该进程相关的信息

    名称 类型 含义 例子
    /proc/{PID}/cmdline 文本 进程启动命令 python3 api_web_perf.py
    /proc/{PID}/status 文本 进程状态信息
    /proc/{PID}/environ 文本 进程环境变量列表
    /proc/{PID}/cwd 目录 链接到进程当前工作目录
    /proc/{PID}/fd 目录 目录下包含进程相关的所有的文件描述符
  • 查看进程状态信息

      root@walkerjun:/proc/582285# cat status
      Name:	python3
      Umask:	0002
      State:	S (sleeping)
      Tgid:	582285
      Ngid:	0
      Pid:	582285
      PPid:	289898
      TracerPid:	0
      Uid:	1000	1000	1000	1000
      Gid:	1000	1000	1000	1000
      FDSize:	256
      Groups:	4 6 24 27 30 46 122 134 135 136 1000 
      NStgid:	582285
      NSpid:	582285
      NSpgid:	582285
      NSsid:	289898
      VmPeak:	 8173120 kB
      VmSize:	 8056468 kB
      VmLck:	       0 kB
      VmPin:	       0 kB
      VmHWM:	 1159944 kB
      VmRSS:	 1113496 kB
      RssAnon:	  852996 kB
      RssFile:	  260396 kB
      RssShmem:	     104 kB
      VmData:	 2899828 kB
      VmStk:	     132 kB
      VmExe:	    2360 kB
      VmLib:	 1608912 kB
      VmPTE:	    3724 kB
      VmSwap:	       0 kB
      HugetlbPages:	       0 kB
      CoreDumping:	0
      THP_enabled:	1
      Threads:	60
      SigQ:	1/62622
      SigPnd:	0000000000000000
      ShdPnd:	0000000000000000
      SigBlk:	0000000000000000
      SigIgn:	0000000001001000
      SigCgt:	0000000100000002
      CapInh:	0000000000000000
      CapPrm:	0000000000000000
      CapEff:	0000000000000000
      CapBnd:	000001ffffffffff
      CapAmb:	0000000000000000
      NoNewPrivs:	0
      Seccomp:	0
      Seccomp_filters:	0
      Speculation_Store_Bypass:	thread vulnerable
      SpeculationIndirectBranch:	conditional enabled
      Cpus_allowed:	fffff
      Cpus_allowed_list:	0-19
      Mems_allowed:	00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
      Mems_allowed_list:	0
      voluntary_ctxt_switches:	3882
      nonvoluntary_ctxt_switches:	192
    
  • 跳转到工作目录

        root@walkerjun:/proc/582285# cd cwd
        root@walkerjun:/proc/582285/cwd# ls
        apis                    backend_configs   config                 handlers     model_services            __pycache__   temp        venv
        api_web_perf_cython.py  backend_models    dev-restart.sh         __init__.py  module                    server_stuff  templates   websocket_client_test.py
        api_web_perf.py         backend_services  dev_setup.sh           lib          my_tests                  setup.py      tools       websocket_test.py
        azure_access_config     backend_utils     dev_setup_windows.ps1  log          openh264-1.8.0-win64.dll  static        unit_tests
    

参考

Linux系统目录结构 | 菜鸟教程
/proc 目录 | 博客园