<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[[经常用到]系统性能监控－－linux top命令详解,SHR  -- Shared Memory size 与共享内存于动态链接库的内存有关系吗的探讨。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Fri, 15 Apr 2011 23:02:08 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	l 切换显示平均负载和启动时间信息。<br/>m 切换显示内存信息。<br/>t 切换显示进程和CPU状态信息。<br/>c 切换显示命令名称和完整命令行。<br/>M 根据驻留内存大小进行排序。<br/>P 根据CPU使用百分比大小进行排序。<br/>T 根据时间/累计时间进行排序。<br/>W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。<br/><br/><br/><br/>　SHR&nbsp;&nbsp;-- Shared Memory size (KB)<br/>&nbsp;&nbsp; The amount ofshared memory used by a task. It simply reflects memory that could bepotentially shared with other processes. (一个任务使用共享内存的总数。它只是反映可能与其它进程共享的内存)也就是这个进程使用共享内存的大小。<br/>共享内存和动态链接库SO没有绝对的关系。<br/>我看的视频课，讲师说的不对。非常感谢老武的分享，这块儿求同存异，这块有一个是进程自己申请一片共享内存的情况，不一定是SO的物理地址在各个空间的映射，新fork之后的子进程，由于copy on write机制，在页面被修改之前，和父进程共享。这部分值并不体现在top命令的SHR字段内，理解的共享内存着眼在编码上，也有局限。<br/><a href="https://www.cnblogs.com/suifengbingzhu/p/4275449.html" target="_blank">https://www.cnblogs.com/suifengbingzhu/p/4275449.html</a><br/><textarea name="code" class="php" rows="15" cols="100">
【驻留内存】
驻留内存，顾名思义是指那些被映射到进程虚拟内存空间的物理内存。上图1中，在系统物理内存空间中被着色的部分都是驻留内存。比如，A1、A2、A3和A4是进程A的驻留内存；B1、B2和B3是进程B的驻留内存。进程的驻留内存就是进程实实在在占用的物理内存。一般我们所讲的进程占用了多少内存，其实就是说的占用了多少驻留内存而不是多少虚拟内存。因为虚拟内存大并不意味着占用的物理内存大。
关于虚拟内存和驻留内存这两个概念我们说到这里。下面一部分我们来看看top命令中VIRT、RES和SHR分别代表什么意思。
top命令中VIRT、RES和SHR的含义
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;搞清楚了虚拟内存的概念之后解释VIRT的含义就很简单了。VIRT表示的是进程虚拟内存空间大小。对应到图1中的进程A来说就是A1、A2、A3、A4以及灰色部分所有空间的总和。也就是说VIRT包含了在已经映射到物理内存空间的部分和尚未映射到物理内存空间的部分总和。
RES的含义是指进程虚拟内存空间中已经映射到物理内存空间的那部分的大小。对应到图1中的进程A来说就是A1、A2、A3以及A4几个部分空间的总和。所以说，看进程在运行过程中占用了多少内存应该看RES的值而不是VIRT的值。
最后来看看SHR所表示的含义。SHR是share（共享）的缩写，它表示的是进程占用的共享内存大小。在上图1中我们看到进程A虚拟内存空间中的A4和进程B虚拟内存空间中的B3都映射到了物理内存空间的A4/B3部分。咋一看很奇怪。为什么会出现这样的情况呢？其实我们写的程序会依赖于很多外部的动态库（.so），比如libc.so、libld.so等等。这些动态库在内存中仅仅会保存/映射一份，如果某个进程运行时需要这个动态库，那么动态加载器会将这块内存映射到对应进程的虚拟内存空间中。多个进展之间通过共享内存的方式相互通信也会出现这样的情况。这么一来，就会出现不同进程的虚拟内存空间会映射到相同的物理内存空间。这部分物理内存空间其实是被多个进程所共享的，所以我们将他们称为共享内存，用SHR来表示。某个进程占用的内存除了和别的进程共享的内存之外就是自己的独占内存了。所以要计算进程独占内存的大小只要用RES的值减去SHR值即可。
</textarea><br/><br/>top命令和ps命令的基本作用是相同的，显示系统当前的进程和其它状况；但是top是一个动态显示过程，即可以通过用户按键来不断刷新当前状态。如? 前台执行该命令，它将独占前台，直到用户终止该程序为止。<br/>比较准确的说，top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用、内存使用、执行时<br/>间对任务进行排序；而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。在后面的介绍中将把命令参数和交互命令分开讲述。<br/>top命令语法：<br/>top [-] [d delay] [q] [c] [s] [S]<br/>d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。<br/>　　q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限，那么top将以尽可能高的优先级运行。<br/>　　S 指定累计模式。<br/>　　s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。<br/>　　i 使top不显示任何闲置或者僵死进程。<br/>　　c 显示整个命令行而不只是显示命令名。(进程的command列显示进程的对应命令行或命令名)<br/>top命令结果详解：<br/>top命令显示的项目很多，默认值是每5秒更新一次。显示的各项目为：<br/>15:06:57 up 129 days, 19:03, 5 users, load average: 1.21, 1.20, 1.25<br/>uptime 该项显示的是系统启动时间、已经运行的时间和三个平均负载值（最近1秒，5秒，15秒的负载值）。<br/>222 processes: 219 sleeping, 2 running, 1 zombie, 0 stopped<br/>processes 自最近一次刷新以来的运行进程总数。这些进程被分为正在运行的，休眠的，停止的等很多种类。<br/>CPU states: cpu user nice system irq softirq iowait idle total 0.9% 0.0% 27.4% 0.0% 0.0% 0.2% 71.2% cpu00 1.9% 0.0% 19.4% 0.0% 0.0% 0.0% 78.6% cpu01 0.0% 0.0% 33.0% 0.0% 0.0% 0.0% 66.9% cpu02 1.9% 0.0% 22.3% 0.0% 0.0% 0.9% 74.7% cpu03 0.0% 0.0% 35.2% 0.0% 0.0% 0.0% 64.7%<br/><br/>CPU states 显示用户模式，系统模式，优先级进程（只有优先级为负的列入考虑）和闲置等各种情况所占用CPU时间的百分比。优先级进程所消耗的时间也被列入到用户和系统的时间中，所以总的百分比将大于100％。<br/>Mem: 16214336k av, 15682832k used, 531504k free, 0k shrd, 215016k buff 10896844k actv, 3379680k in_d, 446432k in_c<br/>Mem 内存使用情况统计，其中包括总的可用内存，空闲内存，已用内存，共享内存和缓存所占内存的情况。<br/>Swap: 10482404k av, 0k used, 10482404k free 14856500k cached<br/>Swap 交换空间统计，其中包括总的交换空间，可用交换空间，已用交换空间。<br/>PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND<br/>27869 root 25 0 460M 460M 455M R 25.0 2.9 12559m 1 vmware-vmx31819 root 16 0 6016 6016 5048 S 1.6 0.0 17573m 2 magicdev27837 root 15 -10 460M 460M 455M S 27868 root 15 -10 460M 460M 455M S<br/>PID 每个进程的ID。PPID 每个进程的父进程ID。UID 每个进程所有者的UID 。<br/>USER 每个进程所有者的用户名。<br/>PRI 每个进程的优先级别。<br/>NI 该进程的优先级值。<br/>SIZE 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。<br/>TSIZE 该进程的代码大小。对于内核进程这是一个很奇怪的值。<br/>DSIZE 数据和堆栈的大小。<br/>TRS 文本驻留大小。<br/>D 被标记为“不干净”的页项目。<br/>LIB 使用的库页的大小。对于ELF进程没有作用。<br/>RES 该进程占用的物理内存的总数量，单位是KB。<br/>SHARE 该进程使用共享内存的数量。<br/>STAT 该进程的状态。其中S代表休眠状态；D代表不可中断的休眠状态；R代表运行状态；Z代表僵死状态；T代表停止或跟踪状态。<br/>TIME 该进程自启动以来所占用的总CPU时间。如果进入的是累计模式，那么该时间还包括这个进程子进程所占用的时间。且标题会变成CTIME。<br/>％CPU 该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。<br/>％MEM 该进程占用的物理内存占总内存的百分比。<br/>COMMAND 该进程的命令名称，如果一行显示不下，则会进行截取。内存中的进程会有一个完整的命令行。<br/>top交互命令选项<br/>Ctrl+L 擦除并且重写屏幕。<br/>h或者? 显示帮助画面，给出一些简短的命令总结说明。<br/>k 终止一个进程。系统将提示用户输入需要终止的进程PID，以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号；如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽.<br/>i 忽略闲置和僵死进程。这是一个开关式命令。<br/>q 退出程序。<br/>r 重新安排一个进程的优先级别。<br/>S 切换到累计模式。<br/>s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间，单位为s。如果有小数，就换算成m s。输入0值则系统将不断刷新，默认值是5 s。需要注意的是如果设置太小的时间，很可能会引起不断刷新，从而根本来不及看清显示的情况，而且系统负载也会大大增加。<br/>f或者F 从当前显示中添加或者删除项目。<br/>o或者O 改变显示项目的顺序。<br/>l 切换显示平均负载和启动时间信息。<br/>m 切换显示内存信息。<br/>t 切换显示进程和CPU状态信息。<br/>c 切换显示命令名称和完整命令行。<br/>M 根据驻留内存大小进行排序。<br/>P 根据CPU使用百分比大小进行排序。<br/>T 根据时间/累计时间进行排序。<br/>W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [经常用到]系统性能监控－－linux top命令详解,SHR  -- Shared Memory size 与共享内存于动态链接库的内存有关系吗的探讨。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>