查看進(jìn)程pid
每個(gè)進(jìn)程都有自己的進(jìn)程id,每次啟動(dòng)或重啟進(jìn)程時(shí)進(jìn)程id大多數(shù)情況下會(huì)變化渴庆。
推薦工具:ps
ps -ef | grep 進(jìn)程名字
查看進(jìn)程的端口號(hào)
推薦工具:netstat
netstat -apn | grep 進(jìn)程名稱或進(jìn)程id
查看進(jìn)程pid的啟動(dòng)目錄
比如一個(gè)進(jìn)程在/usr/bin目錄下啟動(dòng)厂镇,則該進(jìn)程的啟動(dòng)目錄為/usr/bin捺氢。
何時(shí)需要知道進(jìn)程啟動(dòng)的目錄呢?當(dāng)你想知道進(jìn)程的配置信息或代碼然后定位問題剪撬。
推薦工具:pwdx摄乒,readlink
查看單個(gè)或多個(gè)進(jìn)程的啟動(dòng)目錄
pwdx 進(jìn)程pid01,進(jìn)程pid02
查看單個(gè)進(jìn)程的啟動(dòng)目錄
ls /proc/{pid}/cwd
readlink? /proc/{pid}/cwd
readlink /proc/{pid}/exe
cwd符號(hào)鏈接的是進(jìn)程運(yùn)行目錄;exe符號(hào)連接是執(zhí)行程序的絕對(duì)路徑;cmdline是程序運(yùn)行時(shí)輸入的命令行命令;environ記錄了進(jìn)程運(yùn)行時(shí)的環(huán)境變量;fd目錄下是進(jìn)程打開或使用的文件的符號(hào)連接。
查看進(jìn)程打開的文件
進(jìn)程打開的文件有 1.普通的文件;2.目錄馍佑;3.網(wǎng)絡(luò)文件系統(tǒng)的文件斋否;4.字符設(shè)備文件;5.(函數(shù))共享庫(kù)拭荤;6.管道,命名管道 茵臭;7.符號(hào)鏈接 ;8.底層的socket字流,網(wǎng)絡(luò)socket,unix域名socket等舅世,因?yàn)樵贚inux大部分的東西都被當(dāng)做文件旦委。
推薦工具:lsof
lsof -p pid01,pid02 查看進(jìn)程打開文件列表
lsof /filepath/file 查看進(jìn)程id
查看進(jìn)程占用的資源
進(jìn)程占用的資源包括內(nèi)存,CPU和磁盤雏亚,以及網(wǎng)絡(luò)信息缨硝。
查看進(jìn)程占用的內(nèi)存推薦工具:pmap
pmap 進(jìn)程pid
查看進(jìn)程占用磁盤io推薦工具:pidstat、iostat罢低、vmstat
pidstat -d? 進(jìn)程pid
iostat -dx r/s 和 w/s 分別是每秒的讀操作和寫操作查辩,而rKB/s 和wKB/s 列以每秒千字節(jié)為單位顯示了讀和寫的數(shù)據(jù)量。
查看進(jìn)程占用內(nèi)存/CPU/磁盤推薦工具:vmstat
vmstat關(guān)于線程网持、虛擬內(nèi)存宜岛、磁盤和 CPU 活動(dòng)的統(tǒng)計(jì)信息,還可以將生成的報(bào)告用于平衡系統(tǒng)負(fù)載活動(dòng)功舀。
查看是否有僵尸進(jìn)程和孤立進(jìn)程
ps -ef | grep defunc 查看僵尸進(jìn)程
僵尸進(jìn)程和孤立進(jìn)程怎么來的呢萍倡?又會(huì)造成什么影響呢?
如果子進(jìn)程比父進(jìn)程未先退出辟汰,但父進(jìn)程并沒有調(diào)用wait或waitpid獲取子進(jìn)程的狀態(tài)信息列敲,該子進(jìn)程稱之為僵死進(jìn)程。
如果父進(jìn)程比子進(jìn)程先退出莉擒,那么子進(jìn)程將被托孤給init進(jìn)程酿炸,這時(shí)子進(jìn)程稱為孤立進(jìn)程瘫絮,其父進(jìn)程是init進(jìn)程(1號(hào)進(jìn)程)涨冀。
機(jī)制:在每個(gè)進(jìn)程退出的時(shí)候,內(nèi)核釋放該進(jìn)程所有的資源麦萤,包括打開的文件和占用的內(nèi)存等鹿鳖。 但是仍然為其保留一定的信息(包括進(jìn)程號(hào),退出狀態(tài)壮莹,運(yùn)行時(shí)間)翅帜。直到父進(jìn)程通過wait/waitpid來取時(shí)才釋放。 但如果進(jìn)程不調(diào)用wait/waitpid的話命满, 那么保留的那段信息就不會(huì)釋放涝滴,其進(jìn)程號(hào)就會(huì)一直被占用,如果系統(tǒng)所能使用的進(jìn)程號(hào)是有限的,如果大量的產(chǎn)生僵死進(jìn)程歼疮,將因?yàn)闆]有可用的進(jìn)程號(hào)而導(dǎo)致系統(tǒng)不能產(chǎn)生新的進(jìn)程杂抽。此即為僵尸進(jìn)程的危害,應(yīng)當(dāng)避免韩脏。
每當(dāng)出現(xiàn)一個(gè)孤兒進(jìn)程的時(shí)候缩麸,內(nèi)核就把孤兒進(jìn)程的父進(jìn)程設(shè)置為init,而init進(jìn)程會(huì)循環(huán)地wait()已經(jīng)退出的子進(jìn)程赡矢,會(huì)做好善后工作杭朱。孤兒進(jìn)程并沒有有什么危害。
查看進(jìn)程的堆棧信息
推薦工具:gcore吹散、gdb弧械、pstack、strace
gcore 進(jìn)程pid
gdb attach 進(jìn)程pid送浊,再使用命令thread apply all bt
pstack 進(jìn)程pid
strace 進(jìn)程pid
殺死進(jìn)程
kill -9 進(jìn)程pid