pmap命令,查看进程占用的内存及使用地址空间

来源:互联网 发布:tomcat war 部署端口 编辑:程序博客网 时间:2024/06/06 14:16

单独查找文件内容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 命令  查看执行文件具体系统执行流程

[root@CentOS5 ~]#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 一下,第一条就给出了全路径。哈哈~~