Linux系统管理技术手册第四章习题实践
E4.1 解释一个文件的UID和一个正在运行的进程的真实UID以及有效UID之间的关系。除了文件的访问控制外,进程的有效UID有什么用途?
A: 大部分情况下,文件的UID和运行的真实UID以及有效UID是一致的。但是对于setuid程序而言。进程的真实UID和有效UID就有区别了。比如/usr/bin/passwd程序。它的属主是root(UID=0),如果一个用户(UID=1000)运行它,那么真实UID为1000,但是有效UID则为0。有效UID除了文件访问控制外,还能提升当前运行程序的“临时特权”。
E4.2 假定您所负责的站点中,有一个用户已经启动恶劣一个长期运行的进程,它消耗了机器的很大一部分资源。
- 您如何意识到某一个进程正在消耗资源?
- 假定异常的进程可能是合法的,不应该杀死它。给出您要把它“冻结”起来(在您调查期间,暂时停止它的运行)应该使用的命令?
- 随后,您发现这个进程属于 您的老板,必须继续运行下去。给出您要继续执行这个任务应该使用的命令。
- 另一种可能是假定需要杀死这个进程。您会发送什么信号?为什么?如果您要保证这个进程确实已经被杀死了,该怎么做?
A: 查看uptime,发现复杂高于平常,然后查看top结果,能找到异常的进程。
对于不能马上杀死的异常进程,我们可以采取暂定的方式来临时冻结进程,利用
kill -STOP pid
指令来冻结进程。
调查清楚后,如果想继续运行该进程,则使用
kill -CONT pid
来恢复运行。
如果想杀死,可以先尝试
kill -TERM pid
的方式来温柔的杀死,如果不凑效,则利用野蛮杀死法
kill -9 pid
然后通过ps指令查看该进程是否还在。如果不在,则表示已经杀死了。
E4.3 找出一个能导致内存泄漏的进程(如果手头没有,就自己写一个)。用ps或者top来监视程序程序运行时内存的使用情况。
A: 这一类的问题,在实际的工作中遇到过一些,绝大部分都是java程序,因为内存没有回收,导致内存的使用不断的增加,用完内存的一定比列后(由swappiness值决定),继续使用swap值,最后导致系统出现OOM(Out-Of-Memory)。
♥ E4.4 编写一个处理ps输出的Perl脚本,确定在系统上正在运行的进程总的VSZ和RSS值。这些数字和系统物理内存和交换空间的实际量有什么关系?
A:仅仅是获得VSZ和RSS值的总和,没有必要用到perl这种方式吧(其实是我对perl一窍不通),直接awk也能处理。下面是一行指令:
ps aux |awk ‘BEGIN{vsz = 0;rss = 0;print “vsz \t rss”} {vsz+=$5;rss+=$6} END{print vsz,rss}’
下面是我机器上的输出结果:
$ ps aux |awk ‘BEGIN{vsz = 0;rss = 0;print “vsz \t rss”}\
{vsz+=$5;rss+=$6} END{print vsz,rss}’
vsz rss
3310800 830324
要注意一下单位。vsz是进程的虚拟大小,KiB单位。而rss则是驻留大小,KiB单位。因此,我们转换一下。
$ ps aux |awk ‘BEGIN{vsz = 0;rss = 0;print “vsz(GiB) \t rss(MiB)”} \
{vsz+=$5;rss+=$6} END{print vsz / 1024 / 1024 ,rss / 1024 }’
vsz(GiB) rss(MiB)
3.15749 811.973
我机器的内存是:
$ free -m total used free shared buffers cached Mem: 2768 1593 1175 0 168 662 -/+ buffers/cache: 763 2005 Swap: 3169 0 3169
VSZ 是进程使用的虚拟内存大小. (包括内存和SWAP空间上)
RSS 指的是驻留在内存中的大小。
大部分程序都使用共享库,注意VSZ和RSS会包含共享库的部分。如果多个进程都使用相同的共享库,共享部分的内存会分别计入不同的进程内存。所以所有进程RSS部分累加可能会超出物理内存总数。
所以,我认为RSS和VSZ于物理内存以及交换空间没有什么关系,因为其中共享库的内存大小重复计算了。在一些资源紧张的机器上,这两个值可能都超过了内存的总和,比如:
$ ps aux |awk 'BEGIN{vsz = 0;rss = 0;print "vsz(GiB) \t rss(MiB)"} \ {vsz+=$5;rss+=$6} END{print vsz / 1024 / 1024 ,rss / 1024 }'; free -m vsz(GiB) rss(MiB) 62.7103 18703.7 total used free shared buffers cached Mem: 2027 1967 59 0 20 1750 -/+ buffers/cache: 195 1831 Swap: 4094 121 3972
这里,vsz的总和达到了62GiB,远超过6G的内存总和。而rss的总和也达到了1.8G。
不过从我观察到的数据来说,大部分情况下,rss的总和等于buffers + cached值,但是否正确,还需要实际的数据和理论双层检验。
建议继续学习:
- Linux系统管理手册习题实践 (阅读:2790)
- linux系统管理技术手册第十二章系统实践 (阅读:2328)
- Linux系统管理技术手册第10章系统实践 (阅读:2250)
- Linux系统管理技术手册第三章习题实践 (阅读:2196)
- Linux系统管理技术手册第五章习题实践 (阅读:2179)
- Linux系统管理技术手册第十三章系统实践 (阅读:2063)
- Linux系统管理技术手册第8章习题实践 (阅读:1950)
- Linux系统管理技术手册第七章习题实践 (阅读:1874)
- Linux系统管理技术手册第六章习题实践 (阅读:1801)
- Linux系统管理手册第二章习题实践 (阅读:1754)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:mlsx 来源: Linux|系统管理|WEB开发
- 标签: Linux系统管理技术手册 习题
- 发布时间:2009-11-27 17:43:15
- [52] 图书馆的世界纪录
- [52] IOS安全–浅谈关于IOS加固的几种方法
- [51] 如何拿下简短的域名
- [50] android 开发入门
- [49] Oracle MTS模式下 进程地址与会话信
- [49] Go Reflect 性能
- [47] 【社会化设计】自我(self)部分――欢迎区
- [45] 读书笔记-壹百度:百度十年千倍的29条法则
- [37] 程序员技术练级攻略
- [28] 视觉调整-设计师 vs. 逻辑