前言
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