ps aux命令执行后果的几个列的信息的含意
USER 过程所属用户PID 过程ID %CPU 过程占用CPU百分比%MEM 过程占用内存百分比VSZ 虚拟内存占用大小 单位:kb(killobytes)RSS 理论内存占用大小 单位:kb(killobytes)TTY 终端类型STAT 过程状态START 过程启动时刻TIME 过程运行时长,过程曾经耗费的CPU工夫COMMAND 启动过程的命令的名称和参数
top 命令 VSZ,RSS,TTY,STAT, VIRT,RES,SHR,DATA的含意
VIRT:virtual memory usage 虚拟内存1、过程“须要的”虚拟内存大小,包含过程应用的库、代码、数据等2、如果过程申请100m的内存,但理论只应用了10m,那么它会增长100m,而不是理论的使用量RES:resident memory usage 常驻内存1、过程以后应用的内存大小,但不包含swap out2、蕴含其余过程的共享3、如果申请100m的内存,理论应用10m,它只增长10m,与VIRT相同4、对于库占用内存的状况,它只统计加载的库文件所占内存大小SHR:shared memory 共享内存1、除了本身过程的共享内存,也包含其余过程的共享内存2、尽管过程只应用了几个共享库的函数,但它蕴含了整个共享库的大小3、计算某个过程所占的物理内存大小公式:RES – SHR4、swap out后,它将会降下来DATA1、数据占用的内存。如果top没有显示,按f键能够显示进去。2、真正的该程序要求的数据空间,是真正在运行中要应用的。top 运行中能够通过 top 的外部命令对过程的显示方式进行管制。外部命令如下:s – 扭转画面更新频率l – 敞开或开启第一局部第一行 top 信息的示意t – 敞开或开启第一局部第二行 Tasks 和第三行 Cpus 信息的示意m – 敞开或开启第一局部第四行 Mem 和 第五行 Swap 信息的示意N – 以 PID 的大小的顺序排列示意过程列表P – 以 CPU 占用率大小的顺序排列过程列表M – 以内存占用率大小的顺序排列过程列表h – 显示帮忙n – 设置在过程列表所显示过程的数量q – 退出 tops – 扭转画面更新周期序号 列名 含意a PID 过程idb PPID 父过程idc RUSER Real user named UID 过程所有者的用户ide USER 过程所有者的用户名f GROUP 过程所有者的组名g TTY 启动过程的终端名。不是从终端启动的过程则显示为 ?h PR 优先级i NI nice值。负值示意高优先级,正值示意低优先级j P 最初应用的CPU,仅在多CPU环境下有意义k %CPU 上次更新到当初的CPU工夫占用百分比l TIME 过程应用的CPU工夫总计,单位秒m TIME+ 过程应用的CPU工夫总计,单位1/100秒n %MEM 过程应用的物理内存百分比o VIRT 过程应用的虚拟内存总量,单位kb。VIRT=SWAP+RESp SWAP 过程应用的虚拟内存中,被换出的大小,单位kb。q RES 过程应用的、未被换出的物理内存大小,单位kb。RES=CODE+DATAr CODE 可执行代码占用的物理内存大小,单位kbs DATA 可执行代码以外的局部(数据段+栈)占用的物理内存大小,单位kbt SHR 共享内存大小,单位kbu nFLT 页面谬误次数v nDRT 最初一次写入到当初,被批改过的页面数。w S 过程状态。(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/进行,Z=僵尸过程)x COMMAND 命令名/命令行y WCHAN 若该过程在睡眠,则显示睡眠中的零碎函数名z Flags 工作标记,参考 sched.h默认状况下仅显示比拟重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。能够通过上面的快捷键来更改显示内容。通过 f 键能够抉择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或暗藏对应的列,最初按回车键确定。按 o 键能够扭转列的显示程序。按小写的 a-z 能够将相应的列向右挪动,而大写的 A-Z 能够将相应的列向左挪动。最初按回车键确定。按大写的 F 或 O 键,而后按 a-z 能够将过程依照相应的列进行排序。而大写的 R 键能够将以后的排序倒转。
jmap命令
jmap -heap 过程IDAttaching to process ID 17775, please wait...Debugger attached successfully.Server compiler detected.JVM version is 25.121-b13using thread-local object allocation.Parallel GC with 2 thread(s) parallel并发垃圾回收器Heap Configuration: MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 1006632960 (960.0MB) 以后JVM最大堆大小 NewSize = 20971520 (20.0MB) MaxNewSize = 335544320 (320.0MB) OldSize = 41943040 (40.0MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 21807104 (20.796875MB) 以后元空间大小 CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB 元空间最大大小 G1HeapRegionSize = 0 (0.0MB)Heap Usage:PS Young GenerationEden Space: capacity = 25165824 (24.0MB) used = 15424152 (14.709617614746094MB) free = 9741672 (9.290382385253906MB) 61.29007339477539% usedFrom Space: capacity = 1572864 (1.5MB) used = 1013016 (0.9660873413085938MB) free = 559848 (0.5339126586914062MB) 64.40582275390625% usedTo Space: capacity = 1572864 (1.5MB) used = 0 (0.0MB) free = 1572864 (1.5MB) 0.0% usedPS Old Generation capacity = 84934656 (81.0MB) used = 62824456 (59.91407012939453MB) free = 22110200 (21.08592987060547MB) 73.96798781406733% used
ps命令
ps -p 过程ID -o vsz,rss VSZ RSS3701784 413924VSZ是指已调配的线性空间大小,这个大小通常并不等于程序理论用到的内存大小,产生这个的可能性很多,比方内存映射,共享的动静库,或者向零碎申请了更多的堆,都会扩大线性空间大小。RSZ是Resident Set Size,常驻内存大小,即过程理论占用的物理内存大小
pmap命令
pmap -x 过程IDAddress Kbytes RSS Dirty Mode Mapping0000000000400000 4 4 0 r-x-- java0000000000600000 4 4 4 rw--- java00000000017f8000 2256 2136 2136 rw--- [ anon ]00000000c4000000 82944 63488 63488 rw--- [ anon ]00000000c9100000 572416 0 0 ----- [ anon ]00000000ec000000 27648 27136 27136 rw--- [ anon ]00000000edb00000 300032 0 0 ----- [ anon ]......total kB 3701784 413924 400716Address: 内存调配地址Kbytes: 理论调配的内存大小RSS: 程序理论占用的内存大小Mapping: 调配该内存的模块的名称anon,这些示意这块内存是由mmap调配的
JAVA利用内存剖析
JAVA过程内存 = JVM过程内存+heap内存+ 永恒代内存+ 本地办法栈内存+线程栈内存 +堆外内存 +socket 缓冲区内存+元空间linux内存和JAVA堆中的关系RES = JAVA正在存活的内存对象大小 + 未回收的对象大小 + 其它VIART= JAVA中申请的内存大小,即 -Xmx -Xms + 其它其它 = 永恒代内存+ 本地办法栈内存+线程栈内存 +堆外内存 +socket 缓冲区内存 +JVM过程内存
JVM内存模型(1.7与1.8之间的区别)
算一下求和能够得悉前者总共给Java环境调配了128M的内存,而ps输入的VSZ和RSS别离是3615M和404M。RSZ和理论堆内存占用差了276M,内存组成别离为:JVM自身须要的内存,包含其加载的第三方库以及这些库调配的内存NIO的DirectBuffer是调配的native memory内存映射文件,包含JVM加载的一些JAR和第三方库,以及程序外部用到的。下面 pmap 输入的内容里,有一些动态文件所占用的大小不在Java的heap里JIT, JVM会将Class编译成native代码,这些内存也不会少,如果应用了Spring的AOP,CGLIB会生成更多的类,JIT的内存开销也会随之变大JNI,一些JNI接口调用的native库也会调配一些内存,如果遇到JNI库的内存泄露,能够应用valgrind等内存泄露工具来检测线程栈,每个线程都会有本人的栈空间,如果线程一多,这个的开销就很显著以后jvm线程数统计:jstack 过程ID |grep ‘tid’|wc –l (linux 64位零碎中jvm线程默认栈大小为1MB)ps huH p 过程ID|wc -l ps -Lf 过程ID | wc -ltop -H -p 过程IDcat /proc/{pid}/statusjmap/jstack 采样,频繁的采样也会减少内存占用,如果你有服务器衰弱监控,这个频率要管制一下
jstat命令
JVM的几个GC堆和GC的状况,能够用jstat来监控,例如监控某个过程每隔1000毫秒刷新一次,输入20次jstat -gcutil 过程ID 1000 20 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 39.58 95.63 74.66 98.35 96.93 815 4.002 3 0.331 4.333 0.00 39.58 95.76 74.66 98.35 96.93 815 4.002 3 0.331 4.333 41.67 0.00 1.62 74.67 98.35 96.93 816 4.006 3 0.331 4.337 41.67 0.00 1.67 74.67 98.35 96.93 816 4.006 3 0.331 4.337 41.67 0.00 3.12 74.67 98.35 96.93 816 4.006 3 0.331 4.337 41.67 0.00 3.12 74.67 98.35 96.93 816 4.006 3 0.331 4.337 41.67 0.00 8.39 74.67 98.35 96.93 816 4.006 3 0.331 4.337 41.67 0.00 9.85 74.67 98.35 96.93 816 4.006 3 0.331 4.337 S0 年老代中第一个survivor(幸存区)已应用的占以后容量百分比S1 年老代中第二个survivor(幸存区)已应用的占以后容量百分比E 年老代中Eden(伊甸园)已应用的占以后容量百分比O old代已应用的占以后容量百分比P perm代已应用的占以后容量百分比YGC 从应用程序启动到采样时年老代中gc次数YGCT 从应用程序启动到采样时年老代中gc所用工夫(s)FGC 从应用程序启动到采样时old代(全gc)gc次数FGCT 从应用程序启动到采样时old代(全gc)gc所用工夫(s)GCT 从应用程序启动到采样时gc用的总工夫(s)
总结
失常状况下jmap输入的内存占用远小于 RSZ,能够不必太放心,除非产生一些严重错误,比方PermGen空间满了导致OutOfMemoryError产生,或者RSZ太高导致引起零碎公愤被OOM Killer给干掉,就得留神了,该加内存加内存,没钱买内存加替换空间,或者按下面列的组成部分逐个排除。
这几个内存指标之间的关系是:VSZ >> RSZ >> Java程序理论应用的堆大小
转载自:https://www.jianshu.com/p/479...