技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Linux --> Linux系统管理技术手册第四章习题实践

Linux系统管理技术手册第四章习题实践

浏览:2145次  出处信息

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 假定您所负责的站点中,有一个用户已经启动恶劣一个长期运行的进程,它消耗了机器的很大一部分资源。

  1. 您如何意识到某一个进程正在消耗资源?
  2. 假定异常的进程可能是合法的,不应该杀死它。给出您要把它“冻结”起来(在您调查期间,暂时停止它的运行)应该使用的命令?
  3. 随后,您发现这个进程属于 您的老板,必须继续运行下去。给出您要继续执行这个任务应该使用的命令。
  4. 另一种可能是假定需要杀死这个进程。您会发送什么信号?为什么?如果您要保证这个进程确实已经被杀死了,该怎么做?

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值,但是否正确,还需要实际的数据和理论双层检验。

建议继续学习:

  1. Linux系统管理手册习题实践    (阅读:2784)
  2. linux系统管理技术手册第十二章系统实践    (阅读:2324)
  3. Linux系统管理技术手册第10章系统实践    (阅读:2245)
  4. Linux系统管理技术手册第三章习题实践    (阅读:2191)
  5. Linux系统管理技术手册第五章习题实践    (阅读:2172)
  6. Linux系统管理技术手册第十三章系统实践    (阅读:2057)
  7. Linux系统管理技术手册第8章习题实践    (阅读:1946)
  8. Linux系统管理技术手册第七章习题实践    (阅读:1867)
  9. Linux系统管理技术手册第六章习题实践    (阅读:1793)
  10. Linux系统管理手册第二章习题实践    (阅读:1746)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1