Linux中不可錯過的信息寶庫
來自:編程珠璣(微信號:shouwangxiansheng)
作者:守望先生
前言
proc文件系統是一個虛擬文件系統,它存儲了當前內核運行狀態相關文件,並且文件的內容都是動態創建的。用戶可以通過查看這些文件獲取系統狀態以及當前正在運行的進程信息。而通過了解這些信息,能夠幫助我們幫助我們定位疑難問題。本文將簡單介紹通過proc文件系統能夠獲取哪些有用的信息。
總覽
我們進入到/proc目錄下,查看所有文件:
cd stat
ls -al
774 acpi iomem mtrr uptime
775 asound ioports net version
781 buddyinfo irq pagetypeinfo version_signature
782 bus kallsyms partitions vmallocinfo
8 cgroups kcore sched_debug vmstat
813 cmdline keys schedstat zoneinfo
9 consoles key-users scsi
973 cpuinfo kmsg self
974 crypto kpagecgroup slabinfo
978 devices kpagecount softirqs
98 diskstats kpageflags
983 dma loadavg swaps
984 driver locks sys
987 execdomains mdstat sysrq-trigger
99 fb meminfo sysvipc
994 filesystems misc thread-self
996 fs modules timer_list
998 interrupts mounts tty
(列出部分內容)
可以看到有三類內容:
普通文件,如version,它存放的是內核版本相關信息
以數值命名的文件夾,如1,它存放的是init進程相關信息
非數字命名的文件夾,如drivers,它存放的是驅動相關信息
事實上,很多獲取系統信息的命令都是通過讀取/proc下相關文件內容獲取的,例如uname,df,ps等。多數情況下,它們能滿足我們對系統狀態的查看需求,但是並不盡然,因此我們需要簡單了解/proc下的文件,幫助我們獲取更多信息。畢竟它是一個巨大的信息寶庫。
查看系統狀態信息
查看cpu信息-cpuinfo
cat
/proc/cpuinfo
列出的內容較多,這裡不展示。舉例說明幾點,其他內容可自行查閱:
processor,邏輯CPU。例如本人的電腦的邏輯CPU有4個,那麼cpuinfo中會有4條CPU信息記錄。
model name,CPU信息。例如本人的CPU信息為:Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz,表明是intel的i5 低壓處理器,主頻為2.2GHz。
cache size,CPU二級緩存大小。
查看物理內存,交換空間信息-meminfo
head 2 #讀取前兩行內容 8039600 #可支配內存 2762872 #尚未使用內存
MemTotal:
MemFree:
查看網路流量情況-dev
watch
-n
1
cat /proc/net/dev#實時刷新網路流量信息
因篇幅有限,系統狀態信息文件不再一一介紹,它們所包含內容大致如下:
loadavg 負載均衡
swaps 交換空間使用情況
mounts 已載入的文件系統列表
iomem 物理地址分配情況
version 內核版本信息
partitions 分區表
diskstats 每塊磁碟設備的磁碟I/O統計信息列表
interrupts 中斷的使用及觸發情況
zoneinfo 內存區域的詳細信息列表
查看進程相關信息
以數字命名的文件夾中存儲著進程的相關信息。而數字本身就是該進程的pid。也就是說,如果想要知道某個進程當前更多的狀態信息,只需要知道該進程的pid(
參考ps命令常見實用用法
https://www.huyanbing.me/2018/04/06/53515.html
),然後讀取/proc/pid下的文件夾或文件內容即可。
我們隨意進入一個進程id的進程信息文件夾,例如:
cd sched stat
ls
attr exe mounts projid_map status
autogroup fd mountstats root syscall
auxv fdinfo net
cgroup gid_map ns schedstat timers
clear_refs io numa_maps sessionid timerslack_ns
cmdline limits oom_adj setgroups uid_map
comm loginuid oom_score smaps wchan
coredump_filter map_files oom_score_adj smaps_rollup
cpuset maps pagemap stack
cwd mem patch_state
environ mountinfo personality statm
我們可以看到該進程的很多內容,包括:
cmdline 用於開始進程的命令
cwd 當前進程工作目錄的一個符號鏈接
environ 可用進程環境變數的列表
exe 正在進程中運行的程序鏈接
fd/ 這個目錄包含了進程打開的文件描述符
mem 進程在內存中的內容
status 進程的狀態信息
statm 進程的內存使用信息
limits 進程的軟限制,硬限制等信息
maps 進程的內存區域映射信息
stack 當前進程的內核調用棧信息
syscall 進程正在執行的系統調用
task 進程下的線程信息
…
/proc/pid下的內容很多,我們不一一列舉。那麼這些內容有什麼用呢?我們舉幾個簡單的例子。例如我們發現程序運行時打開一個文件失敗,並且沒有足夠的信息判斷失敗原因,那麼我們就可以考慮查看該進程打開的文件描述符是否已達到上限。這裡我們可以查看/proc/pid下的limits中的文件描述符限制數量:
sed "/open/p" 1024 1048576
Max open files
可以看到最大可打開的文件數量的軟限制為1024,而再次進入到fd目錄,計算總的打開的文件數量(參考ls命令常見實用用法
https://www.huyanbing.me/2018/09/16/51043.html
):ls "^l" 4
這裡得到的大小為4,很顯然沒有超出打開的最大文件數量限制。我們甚至還可以看到到底打開了哪些文件:
1 64 11 18 11 36 0 /dev/ 2 1 64 11 18 11 36 1 /dev/ 2 1 64 11 18 11 18 2 /dev/ 2ls -al
lrwx------
lrwx------
lrwx------
(列出部分內容)
註:文件描述符0,1,2分別代表了標準輸入,標準輸出和標準錯誤輸出。
再比如,進程在當前目錄創建一個文件失敗,而又無更多異常信息,可以查看進程的cwd鏈接指向,如果指向了一個不在預期內的目錄,那麼可能是工作目錄被意外更改掉了。
總結
proc文件系統相關內容過於豐富,本文僅僅做簡單介紹。每一項的具體內容含義,以及在實際中的應用,本文不做過多闡述,後面的文章將會繼續介紹。/proc/pid下的內容對於問題的定位也十分地有幫助,本文只有簡單舉例,更多的使用也會在後續文章中不斷應用。
●編號652,輸入編號直達本文
●輸入m獲取文章
目錄
推薦↓↓↓
運維
更多推薦
《
25個技術類公眾微信
》
涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。


※diff,Linux下文本比對方法
※nginx常用功能全揭秘
TAG:Linux學習 |