proc pid fd/pid/statm哪几个数代表程序占用总内存

您所在的位置: &
Proc令系统信息了如指掌
Proc令系统信息了如指掌
Proc是一个虚拟文件系统,在Linux系统中它被挂载于/proc目录之上。
【51CTO原创】Proc是一个虚拟文件系统,在Linux系统中它被挂载于/proc目录之上。Proc有多个功能 ,这其中包括用户可以通过它访问内核信息或用于排错,这其中一个非常有 用的功能,也是Linux变得更加特别的功能就是以文本流的形式来访问进程信息。很Linux命令(比如 ps、toPpstree等)都需要使用这个文件系统的信息。
本文就是向用户介绍一些访问这些信息的方法 。需要说明的是,本文所述的内容并不 一定适用所有内核版本,有部分操作只适用于2.6内核。
一、进程信息
在/proc文件系统中,每一个进程都有一个相应的文件 。下面是/proc目录下的一些重要文件 :
/proc/pid/cmdline 包含了用于开始进程的命令 ;
/proc/pid/cwd包含了当前进程工作目录的一个链接 ;
/proc/pid/environ 包含了可用进程环境变量的列表 ;
/proc/pid/exe 包含了正在进程中运行的程序链接;
/proc/pid/fd/ 这个目录包含了进程打开的每一个文件的链接;
/proc/pid/mem 包含了进程在内存中的内容;
/proc/pid/stat包含了进程的状态信息;
/proc/pid/statm 包含了进程的内存使用信息。
下面是一些获取进程信息的例子:
◆ 假设现在要查看是否所有的进程都会做存储器清除工作。在/proc/pid/stat文件中的每一 个进程标识 (第8个属性)提供了有关进程的很多 “个人”信 息。这个信 息可以对每一个 进程标识进行。
0x Process being created
0x Exiting
0x Process using
superuser privflage
0x& P rocess dumping core
0x Prooess received some signal
0x& Process allocating memory
0x Killed due to out-of--memory condition
笔者从/usr/src/linux/include/linux/sched.h 中提取了这些信息。
◆ /proc/pid/fd/ 目录提供 了有关打开文件的信息。要查看被进程使用的输入文件,使用以下命令 :
# ls Cl /proc/pid/fd/0
◆& 查看被进程使用socket,使用以下命令 :
#ls Cl /proc/pid/fd|sed Cn `/socket/{s/.*\[//;s/\]//p}`
有关这些socket的信息可以使用以下命令获取 :
# netstat --ae
◆ 要将命令行参数传递给任意进程,使用以下命令 :
~~cat /proc/pid/cmdline
◆ 要 获取某一进程父进程的ID号,使用以下命令:
#grep PPid/proc/pid/status
二、普通的系统信息
Proc包含了很多系统信息,这其中包括CPU负载、文件系统和网络配置 。下面是一些通过Proc查看和更改系统的例子:
◆ 获取可用系统内存的空间 :
# grep& Free /proc/meminfo
◆ 自从系统最后一次启动后的系统统计可以从/proc/stat文件中获取 :
#grep processes /proc/stat
◆ 获知第 1、5和15分钟系统负载的平均值 :
#awk `{print “1 min:\t” $1 “\n5 min:\t” $2 “\n15 min:\t” $3` /proc/loadavg
◆ /proc/partitions可用于获取系统的分区信息 。
◆ /proc/net和/proc/sys/net可用于查看和更改重要的网络信息。比如,禁用ping命令,可以以 root身份运行以下命令 :
#echo 1>/proc/sys/net/ipv4/icmp_echo_ignore_all
如果要启用IP转发/IP伪装,使用以下命令 :
#echo 1> /proc/sys/net/ipv4/ip_forward
◆ 已经挂载的文件系统信息可以从/proc/mounts中检索。
◆ 要改变正在使用的主机名 ,使用以下命令:
>/proc/sys/kernel/hostname
◆ 要获取CPU信息,使用以下命令 :
# cat /proc/cpuinfo
◆ 要获知swap空间的使用情况 ,使用以下命令:
# cat /proc/swaps
◆ 获取系统的正常运行时间:
#cat /proc/uptime
◆ 列出由NFS共享的文件系统:
# cat /proc/fs/nfsd/exports
三、相关内核的信息
这是一个非常宽泛的主题,这里只介绍其中一小部分内容:
◆ 从正在运行的内核中获知内核的版本:
#cat /proc/version
◆ /proc/kmsg文件被作为内核日志信息源,它可以被作为一个系统信息调用的接口使用。
◆ /proc/kcore文件提供了以内核文件格式形式访问系统物理内存,并且可以被gdb用于检查任意内核数据结构的当前状态。如果装了源码,那么可以通过查看/usr/src/linux/Documentation/filesystems/proc.txt文件来获取更多的信息 。
从中可以看出来,Proc是一个非常不错的获取系统信息渠道。如果利用得好,则它对Linux系统的维护和管理能提供非常大的帮助。
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&的更多文章
Linux命令行吸引了大多数Linux爱好者。一个正常的Linux用户一般
Linux界极具活力,面向不同的用户可以使用不同的Linux发行版,比如适合新手和游戏爱好者等。
北京时间10月18日,Ubuntu 13.10(代号为Saucy Salama
回顾PC漫长的发展史,如果让你想一个关键词,我相信很
日晚7点整,微软公司如约发布了Windows 8
本书从计算机网络安全的概念入手,分析了单机节点、单一网络、互联网络和开放互联网络的基本安全问题,并对计算机网络安全体系架
51CTO旗下网站/proc/pid/statm
包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。
[root@localhost ~]# cat /proc/self/statm
654 57 44 0 0 334 0
CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:
参数 解释 /proc/&/status
Size (pages) 任务虚拟地址空间的大小 VmSize/4
Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4
Shared(pages) 共享页数 0
Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4
Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4
Drs(pages) 程序数据段和用户态的栈的大小 (VmData VmStk )4
dt(pages) 0&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。博客访问: 1202031
博文数量: 378
博客积分: 10161
博客等级: 上将
技术积分: 5117
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
发布时间: 17:35:14
ls /proc 能看到一些数字命名的文件夹,这个就不多说了,什么pid、fd的知识还是容易弄到的拿init开刀,[root@localhost proc]# cat /proc/1/statm487 185 133 31 0 67 0很简单地返回7组数字,每一个的单位都是一页 (常见的是4KB)分别是size:任务虚拟地址空间大小Resident:正在使用的物理内存大小Shared:共.........
阅读(3982) | 评论(4) | 转发(6)
发布时间: 11:23:08
&gdb的基本工作原理&转自:&/linux/howgdbwork/还是面某M的时候,面试官问我:“用过gdb么?” 答:“用过,调了两年bug了”。“那好,给我解释下gdb是怎么工作的?或者说跟内核什么地方有关系?”。是阿,gdb凭什么可以调试一个程序?凭.........
阅读(584) | 评论(0) | 转发(1)
发布时间: 13:13:07
可以复习一下xargs的用法,和变量的一些高级操作技巧&如何批量把若干文件从一个扩展名改为另一个扩展名?比如把后缀gz,改为zip答:1.for file in *. do mv $file `basename $file .gz`. done&或(也适合ksh)&for file in *. do mv $file ${file%.gz}. done.........
阅读(541) | 评论(0) | 转发(1)
发布时间: 19:39:25
&vim中设置python代码缩进为4个空格很苦恼python这个东西是严格缩进的,但是我在linux下用vim下的py,默认tab是8个空格那么长(其实还是一个tab,用set tabstop=4只是把缩进量给改了,还是一个tab,拿到win下依然不正常。:set softtabstop=4也是照旧,于是按照“外事不明上GOOGLE,内事不.........
阅读(1496) | 评论(0) | 转发(0)
发布时间: 12:58:02
工作中经常在shell脚本中看到set的这两个用法,但就像生活中的很多事情,习惯导致忽视,直到出现问题才引起关注。1.&set&-eset命令的-e参数,linux自带的说明如下:"Exit&immediately&if&a&simple&command&exits&with&a&non-zero&status."也就是说.........
阅读(7613) | 评论(0) | 转发(2)
给主人留下些什么吧!~~
如果有Python写作的兴趣,可以联系我。QQ:
 |   |  
您好。我是一家出版社的编辑,你接触Python多长时间了。
 |   |  
请登录后留言。测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。
/proc/meminfo 机器的内存使用信息
/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。
/proc/pid/statm 进程所占用的内存
[root@localhost ~]# cat /proc/self/statm
654 57 44 0 0 334 0
CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:
参数 解释 /proc//status
Size (pages) 任务虚拟地址空间的大小 VmSize/4
Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4
Shared(pages) 共享页数 0
Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4
Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4
Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4
dt(pages) 04
查看机器可用内存
/proc/28248/&free
total used free shared buffers cached
Mem: 400 668 503688
-/+ buffers/cache: 744
Swap: 08 1870312
我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。
所以 空闲内存=free+buffers+cached=total-used
查看进程使用的内存
查看一个进程使用的内存,是一个很令人困惑的事情。因为我们写的程序,必然要用到动态链接库,将其加入到自己的地址空间中,但是/proc/pid/statm统计出来的数据,会将这些动态链接库所占用的内存也简单的算进来。
这样带来的问题,动态链接库占用的内存有些是其他程序使用时占用的,却算在了你这里。你的程序中包含了子进程,那么有些动态链接库重用的内存会被重复计算。
因此要想准确的评估一个程序所占用的内存是十分困难的,通过写一个module的方式,来准确计算某一段虚拟地址所占用的内存,可能对我们有用。(T002)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:172774次
积分:2261
积分:2261
排名:第12053名
原创:20篇
转载:186篇
评论:14条
(5)(8)(4)(10)(2)(4)(8)(4)(4)(1)(19)(3)(1)(1)(14)(5)(4)(1)(2)(1)(1)(3)(2)(4)(4)(2)(12)(3)(2)(8)(9)(2)(6)(15)(20)(11)(8)(4)(1)(2)(1)

我要回帖

更多关于 proc pid 的文章

 

随机推荐