天天看點

pmap指令,檢視程序占用的記憶體及使用位址空間

單獨查找檔案内容grep

grep   /usr/local/*   -e   who       #who 是查找的内容

用 zcat 檢視壓縮的檔案 

單個磁盤的容量現在已經超過了 1TB,但是大型資料檔案、日志檔案、圖像以及電影等媒體檔案很快就把磁盤裝滿了。為了節省空間,可以把許多檔案壓縮到原大小的幾分之一。例如,Apache 日志檔案(是簡單的文本)可以壓縮到原大小的十分之一。 

盡管壓縮可以節省磁盤空間,但是也會增加工作量。例如,如果需要分析壓縮的 Apache 日志檔案,就必須解壓它,處理資料,然後重新壓縮它。如果有大量日志檔案(如果保留分析趨勢所需的記錄,這種情況很常見),那麼開銷會非常大。 

幸運的是,gzip 套件包含許多可以 “在原地” 處理壓縮檔案的實用程式。zcat、zgrep、zless、zdiff 等實用程式的作用分别與 cat、grep、less 和 diff 相同,但是它們操作壓縮的檔案。 

 zcat /home/downfile/test.tar.gz | grep -a 'key_name'      # -a :  grep認為這是二進制檔案

用 pgrep 尋找程序 

您可能無數次使用 ps aux | grep ... 尋找程序。這當然是有效的,但是有一種更高效的搜尋程序的方法。請試試 pgrep。 

例如,以下指令尋找 strike 的所有登入 shell(其中的 strike 是使用者名): 

$ pgrep -l -u strike zsh 

10331 zsh 

10966 zsh 

pgrep 指令提供篩選選項,允許按使用者名(上面給出的 -u)、程序組、組等篩選程序。配套的實用程式 pkill 接受 pgrep 的所有選項和一個信号,它把這個信号發送給與給定的條件比對的所有程序。 

例如,指令 pkill -9 -u strike zsh 與 pgrep -u strike zsh | xargs kill -9 等效。

ldd 指令路徑 檢視執行檔案所依賴的庫檔案

strace 指令  檢視執行檔案具體系統執行流程

[[email protected] ~]#pmap -d 9639

每列的含義如下:

參數 解釋

Address:程序所占的位址空間

Kbytes:該虛拟段的大小

RSS:裝置号(主裝置:次裝置)

Anon:裝置的節點号,0表示沒有節點與記憶體相對應

Locked:是否允許swapped

Mode 權限:r=read, w=write, x=execute, s=shared, p=private(copy on write)

Mapping:bash 對應的映像檔案名

Resident :表示在記憶體中駐留的段的空間   

shared :表示這些北配置設定的記憶體是被系統中其他程序共享的。    

private :表示隻能被該程序使用的空間大小。你可以發現share的空間不具有 private的屬性。

Prstat -LP 的輸出的意義是:

size:就是該程序占用的位址空間。

RSS:實際被配置設定的記憶體的大小。

你看到的resident和RSS不同,是RSS是程序在記憶體中的實際的大小,這個數值最大可以達到Resident顯示數值。

比方說,用pgrep java得出pid後,用pmap $pid,得出輸出結果如下:

23792:    /usr/java/jdk1.5.0_14/bin/java-Djava.util.logging.manager=com.caucho.log.LogManagerImpl-Djava.system.class.loader=com.caucho.loader.SystemClassLoader-Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl-Djava.awt.headless=true -Dresin.home=/usr/local/resin3.1.8-rtuku/-Xmx256m -Xss1m -Xdebug -Dcom.sun.management.jmxremote-Djava.util.logging.manager=com.caucho.log.LogManagerImpl-Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl-Djava.awt.headless=true -Dresin.

0028f000        72K r-x--  /lib/libnsl-2.3.4.so

002a1000          8K rwx--  /lib/libnsl-2.3.4.so

002a3000          8K rwx--      [anon ]

0031c000        84K r-x--  /lib/ld-2.3.4.so

00331000          4K r-x--  /lib/ld-2.3.4.so

00332000          4K rwx--  /lib/ld-2.3.4.so

0033a000    1172K r-x--  /lib/tls/libc-2.3.4.so

0045f000          4K r-x--  /lib/tls/libc-2.3.4.so

00460000        12K rwx--  /lib/tls/libc-2.3.4.so

00463000          8K rwx--      [anon ]

00467000      132K r-x--  /lib/tls/libm-2.3.4.so

……

b7f50000          4K rwx--      [anon ]

b7f51000          4K r-x--      [anon ]

b7f52000          4K r-x--      [anon ]

bfcf1000        12K -----      [ anon]

bfcf4000    1012K rwx--      [ stack ]

  total    652340K

從中可以看出來加載的所有so和線程堆棧用掉的記憶體。

據稱,當anon在512K-4M之間的超過上千個的時候,可能就是在多線程上有問題了。

還有一個用途,比較偏門的。

比如一個squid伺服器,前人直接cd進目錄,然後./squid啟用的服務。那怎麼去知道這個squid到底在那個目錄裡呢?(尤其是發現慣用的/usr/local下嘩嘩的擺着五個squid目錄……)

現在隻要pmap 一下,第一條就給出了全路徑。哈哈~~