美文网首页
第五章 性能工具:特定进程内存

第五章 性能工具:特定进程内存

作者: super_pcm | 来源:发表于2019-08-07 18:01 被阅读0次

    5.1 Linux内存子系统

    在诊断内存性能问题的时候,也许有必要观察应用程序在内存子系统的不同层次上是怎样执行的。在顶层,操作系统决定如何利用交换内存和物理内存。它决定应用程序的哪一块地址空间将被放到物理内存中,即所谓的驻留集。不属于驻留集却又被应用程序使用的其他内存将被交换到磁盘。由应用程序决定向操作系统请求多少内存,即所谓的虚拟集。

    当应用程序使用物理内存时,它首先与CPU的高速缓存子系统交换。现代CPU有多级高速缓存。最快的高速缓存离CPU最近(L1),其容量也是最小的。举个例子,假设CPU只有两级高速缓存:L1和L2.当CPU请求一块内存时,处理器会检查看该内存是否已经存在于L1高速缓存中。如果处于,CPU就可以直接使用。如果不在L1高速缓存中,处理器产生一个L1高速缓存不命中。然后它会检查L2高级缓存,如果数据在L2缓存中,那么它可以直接使用;否则处理同上,然后去物理内存中取回信息。明智使用高速缓存,减少高速缓存不命中的次数,可以提高性能。

    5.2 内存性能工具

    5.2.1 ps

    ps内存参数说明

    参数 说明
    vsz 虚拟集大小是指应用程序使用的虚拟内存的容量。由于Linux只在应用程序试图使用物理内存时才分配它,因此,该项数值可能会比应用程序使用的物理内存量大很多。
    rss 驻留集大小是指应用程序当前使用的物理内存量
    tsiz 文本大小是指程序代码的虚拟大小
    dsiz 数据大小是指程序使用率的虚拟大小
    majflt 主故障是指使得Linux代表进程从磁盘读取页面的缺页故障的数量。

    5.2.2 /proc/<PID>

    Linux内核提供一个虚拟文件系统,使你能提取在系统上运行的进程信息。/proc的接口非常简单,里面的虚拟文件可以用cat来读取。系统上的每个PID在/proc目录下都有一个文件夹,包含一系列的文件。其中status是进程的PID的进程信息,其检索命令为:

    cat /proc/<PID> status
    

    status文件显示的内存统计信息部分解析如下

    输出 说明
    VmSize 仅存的虚拟集大小,是应用程序使用的虚拟内存量,同ps的vsz
    VmLck 被进程锁定的内存量,被锁定的内存不能交换到磁盘
    VmRSS 驻留集大小或者应用程序当前使用的物理内存量。
    VmData 数据大小或程序使用数据量的虚拟大小,不包含堆栈信息
    VmStk 进程的堆栈大小
    VmExe 程序的可执行内存的虚拟大小。它不包含进程使用的库
    VmLib 进程使用的库的大小

    例子:查看weblogic进程的情况

    可以看出这个java进程的程序代码只有36K,堆栈96K,数据很大(2712776K),库不大不小(92608)。说明进程没有多少的可执行代码,使用了90多M的库来支持其执行,小的堆栈意味着该进程没有调用深度嵌套的函数,或者没有调用使用了大型或多个临时变量的函数。VmLck说明没有内存被锁定,使得没法交换内存。VmRSS大小为1.1G意味着当前进程使用了1.1G的物理内存,不过它分配或映射的大小为2.8G。如果应用程序开始使用之前已分配但并非正在使用的内存,那么VmRSS会增加,而VmSize会保持不变。

    如上所述,应用程序的Vmlib的大小不为零,因此使用了库,可以查看maps文件来了解它使用了哪些库。

    相关文章

      网友评论

          本文标题:第五章 性能工具:特定进程内存

          本文链接:https://www.haomeiwen.com/subject/nhyadctx.html