工作中常用的命令netstat、lsof、ps和top


netstat命令選項:

-a all 默認不顯示LISTEN相關

-t tcp

-u udp

-n number 不顯示別名,能顯示數字的都用數字顯示。由於不需要把數字轉換成別名,所以顯示的快一些

-l listen 僅列出正在監聽的服務狀態

-p program 顯示建立連接的程序名

-r route 路由信息

-e extention 擴展信息,比如uid等

 

-s statistic 按各個協議進行統計

-c cycle 每隔一段時間周期執行netstat命令

實戰應用1:公司內部的一個老服務運行在192.168.1.1:50060上,服務將於一周之后停用,再在要查一下本機上有沒有進行在調用該服務。

使用命令netstat -pt可以輸出PID及程序名:

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 localhostname:16061 192.168.1.1:50060       ESTABLISHED 22000/java

是本機的16061端口在調192.168.1.1:50060上的服務,且本機16061端口上跑的是一個java程序,進程ID是22000

 

 lsof可以查看系統打開的文件,這里的“文件”包括/proc文件、磁盤文件、網絡IO等。

lsof命令常用選項:

lsof  filename 顯示打開指定文件的所有進程
lsof -a 表示兩個參數都必須滿足時才顯示結果
lsof -c string   顯示COMMAND列中包含指定字符的進程所有打開的文件
lsof -u username  顯示所屬user進程打開的文件
lsof -g gid 顯示歸屬gid的進程情況
lsof +d /DIR/ 顯示目錄下被進程打開的文件
lsof +D /DIR/ 同上,但是會搜索目錄下的所有目錄,時間相對較長
lsof -d FD 顯示指定文件描述符的進程
lsof -n 不將IP轉換為hostname,缺省是不加上-n參數
lsof -i 用以顯示符合條件的進程情況
lsof -i[46] [protocol][@hostname|hostaddr][:service|port] 46 --> IPv4 or IPv6 protocol --> TCP or UDP hostname --> Internet host name hostaddr --> IPv4地址 service --> /etc/service中的 service name (可以不只一個) port --> 端口號 (可以不只一個)
小例子:查看所屬root用戶進程所打開的文件類型為txt的文件: 
# lsof -a -u root -d txt

還實戰應用1的例子,我們可以用lsof命令得到結果。

lsof -i:@192.168.1.1:50060,輸出:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 22000 root 106u IPv4 1592198833 0t0 TCP localhostname:16061->192.168.1.1:50060 (ESTABLISHED)

FD表示文件描述符,應用程序通過文件描述符來識別文件,文件描述符后有u表示程序是以讀寫的權限打開文件的(r只讀w只寫)。

 

ps命令列出進程狀態。

在實戰應用1中,我們想查看PID為22000的程序到底是哪個程序可以用:

ps -ef | grep 22000

輸出:

UID        PID  PPID  C STIME TTY          TIME CMD

在CMD列你可以看到程序名

或者用ps aux | grep 22000

輸出:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

aux比-ef輸出的信息更多,比如%CPU和%MEM。

 

top命令用於實時查看服務器性能

# top

top - 16:31:10 up 493 days, 2:18, 1 user, load average: 3.79, 5.07, 5.00
Tasks: 134 total, 1 running, 133 sleeping, 0 stopped, 0 zombie
Cpu(s): 8.9%us, 0.7%sy, 0.0%ni, 89.9%id, 0.2%wa, 0.1%hi, 0.2%si, 0.0%st
Mem: 32949016k total, 32857500k used, 91516k free, 181172k buffers
Swap: 32764556k total, 759976k used, 32004580k free, 18778656k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
21902 root 25 0 7732m 6.1g 11m S 73.2 19.4 3257:11 java 
22616 root 21 0 3184m 2.0g 12m S 1.7 6.3 45:44.93 java 
20028 root 22 0 3493m 1.7g 12m S 1.3 5.4 95:23.61 java 
21784 root 15 0 12756 1104 816 R 0.3 0.0 0:00.05 top 
24526 root 20 0 8408m 160m 9524 S 0.3 0.5 7:54.50 java 
1 root 15 0 10364 572 536 S 0.0 0.0 7:53.62 init

解釋一下,第一行:16:31:10是當時時間,up 493 days是系統已經運行了這么長時間,1 user當前只有1個用戶登錄了系統,load average后面是1分鍾、5分鍾、15分鍾系統的負載情況。

第二行:當前有134個進行在運行,133個在休眠,0個已停止,0個僵屍。

第三行:8.9%us是用戶進行占用cpu的量,0.7%sy是內核進程占用cpu的量。

進行詳細信息。PR是優先級,NI是nice值,真正的優先級實際上是PR+NI。

top命令的常用參數:

-d   指定每兩次屏幕信息刷新之間的時間間隔。
-p   通過指定監控進程ID來僅僅監控某個進程的狀態。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM