常用命令(二)

第二类: 内存常用命令:
free, vmstat,JMap, Jstack ,jstat


free命令:
  主要用于查看系统的空闲内存和已经使用的内存
  
free命令用法
free [-b | -k | -m] [-o] [-s delay ] [-t] [-V]

free [选项]
  -b 按bytes字节显示内存大小
  -k 按kilobytes字节显示内存大小
  -m 按megabytes字节显示内存大小
  -o 是一个是否显示 buffer 调整值的一个开关  
  -s 每次显示内存信息的时间间隔
  -t 是一个是否显示 内存总量统计 的一个开关 

示例:

-sh-3.00$ free -t -s 3
             total       used       free     shared    buffers     cached
Mem:       4149104    4088024      61080          0     130292    2002228
-/+ buffers/cache:    1955504    2193600
Swap:      2096472        208    2096264
Total:     6245576    4088232    2157344

             total       used       free     shared    buffers     cached
Mem:       4149104    4088024      61080          0     130292    2002228
-/+ buffers/cache:    1955504    2193600
Swap:      2096472        208    2096264
Total:     6245576    4088232    2157344


第一部分Mem行:
total 内存总数
used 已经使用的内存数
free 空闲的内存数
shared 当前已经废弃不用,总是0
buffers Buffer 缓存内存数
cached Page 缓存内存数

下面是buffers与cached的区别。
buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.
cached是用来给文件做缓冲。
前者针对磁盘块的读写,后者针对文件inode的读写。
那就是说:buffers是用来存储,目录里面有什么内容,权限等等。
而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。
关系:total(1002M) = used(769M) + free(232M)

第二部分(-/+ buffers/cache):
(-buffers/cache) used内存数:286M (指的第一部分Mem行中的used - buffers - cached)
(+buffers/cache) free内存数: 715M (指的第一部分Mem行中的free + buffers + cached)

可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。

 

vmstat命令:
  vmstat 命令报告关于内核线程、虚拟内存、磁盘、系统调用和 CPU 活动的统计信息。
  
vmstat命令用法
       vmstat [-a] [-n] [delay [ count]]
       vmstat [-f] [-s] [-m]
       vmstat [-S unit]
       vmstat [-d]
       vmstat [-p disk partition]
       vmstat [-V]

vmstat [选项]
  -s 显示各种事件和内存的统计信息
  -S 显示各内存的统计信息的单位 K/M
  -d 显示磁盘的读写统计信息
  delay 显示信息的时间间隔
  count 显示统计信息的次数

  
输出信息:

内核进程:  
 r   置于运行队列中的内核线程数目。
 b  置于等待队列(等待资源、等待输入/输出)的内核线程数目。

mem内存:
 swpd   使用的虚拟内存大小
 free   闲置内存大小
 inact  闲置内存大小(包含 buffer/cache)
 active 活动的内存大小(包含 buffer/cache)
 
swap 交换区
 si   每秒从磁盘交换到swap区的大小
 so  每秒从swap区交换到磁盘的大小
 
io 磁盘io
 bi    每秒收到块设备的阻塞次数
 bo  每秒发送给块设备的阻塞次数

System
 in    每秒的终端次数
 cs  每秒的上下文交换次数

cpu
 us   用户进程消耗的cpu时间百分比
 sy   系统进程消耗的cpu时间百分比
 id   cpu空闲时间百分比
 wa  等待磁盘IO的百分比
 
示例:
-sh-3.00$ vmstat 3 4
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
 0  0    208  47808 131732 2014828    0    0     0     5    0     0  1  0 99  0
 0  0    208  47744 131732 2014828    0    0     0    28 1042  1608  0  0 100  0
 0  0    208  47736 131740 2014820    0    0     0    85 1086  1670  0  0 100  0
 0  0    208  47800 131740 2014820    0    0     0    43 1054  1436  0  0 100  0
 
 
关于磁盘统计信息:
 
   Reads
       total: Total reads completed successfully
       merged: grouped reads (resulting in one I/O)
       sectors: Sectors read successfully
       ms: milliseconds spent reading

   Writes
       total: Total writes completed successfully
       merged: grouped writes (resulting in one I/O)
       sectors: Sectors written successfully
       ms: milliseconds spent writing

   IO
       cur: I/O in progress
       s: seconds spent for I/O
       
-sh-3.00$ vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
ram0       0      0       0       0      0      0       0       0      0      0
ram1       0      0       0       0      0      0       0       0      0      0
ram2       0      0       0       0      0      0       0       0      0      0
ram3       0      0       0       0      0      0       0       0      0      0
ram4       0      0       0       0      0      0       0       0      0      0
ram5       0      0       0       0      0      0       0       0      0      0
ram6       0      0       0       0      0      0       0       0      0      0
ram7       0      0       0       0      0      0       0       0      0      0
ram8       0      0       0       0      0      0       0       0      0      0
ram9       0      0       0       0      0      0       0       0      0      0
ram10      0      0       0       0      0      0       0       0      0      0
ram11      0      0       0       0      0      0       0       0      0      0
ram12      0      0       0       0      0      0       0       0      0      0
ram13      0      0       0       0      0      0       0       0      0      0
ram14      0      0       0       0      0      0       0       0      0      0
ram15      0      0       0       0      0      0       0       0      0      0
sda        0      0       0       0      0      0       0       0      0      0
sdb   3185123 325652 101742680 7396945 106171205 176510901 2261463001 113888066      0  27536
sr0        0      0       0       0      0      0       0       0      0      0
md0        0      0       0       0      0      0       0       0      0      0
md1        0      0       0       0      0      0       0       0      0      0
md2        0      0       0       0      0      0       0       0      0      0
md3        0      0       0       0      0      0       0       0      0      0

 

 

 


作为一个java 开发者,常用的java bin下面提供的几个常用的java 内存查看分析工具还是有 必要熟悉下的,顺便记录下常用的java 查看内存命令:

一: JMap:

可以通过 /opt/taobao/java1/bin/jmap -h 查看命令的帮助

jmap 会打印出 堆中的对象相关信息,如数量,大小

EG:

 /opt/taobao/java/bin/jmap -dump:format=b,file=heap.dump  8139

 /opt/taobao/java/bin/jmap -histo 8139 > ~/heap.dump 

 

这里 -dump 参数指定了 dump生产的文件的格式,否则 使用MAT(安装地址: http://download.eclipse.org/technology/mat/latest/update-site/ ) 来分析内存的打开dump的内存文件的时候会提示你 invalid HPROF file header 错误, 如果打开dump文件因内存大小问题异常,可以修改eclipse的 启动配置,加大

-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms80m
-Xmx512m

 

 

二: Jstack

主要是打印栈信息,也就是方法调用的信息,内存的溢出也就分 堆溢出和 栈溢出

Options:
    -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)
    -m  to print both java and native frames (mixed mode)
    -l  long listing. Prints additional information about locks
    -h or -help to print this help message


线程dump来查看分析cpu资源的占用, EG:

[admin@buy14 ~]$ /opt/taobao/java/bin/jstack 10623 > ~/jstack.dump

[admin@buy14 ~]$ ps -To %cpu,spid 10623   查看是什么线程在占用CPU,

然后根据CPU占用高的线程id,到thread dump里找堆栈信息,这里的spid需要换换成为 16进制数据查询。


 

三:jstat

 

jstat是vm的状态监控工具,监控的内容有类加载、运行时编译及GC。

/opt/taobao/java1/bin/jstat -options 可以查看有些什么选择项

    jstat -class pid:显示加载class的数量,及所占空间等信息。
    jstat -compiler pid:显示VM实时编译的数量等信息。
    jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
    jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。
    jstat -gcnew pid:new对象的信息。
    jstat -gcnewcapacity pid:new对象的信息及其占用量。
    jstat -gcold pid:old对象的信息。
    jstat -gcoldcapacity pid:old对象的信息及其占用量。
    jstat -gcpermcapacity pid: perm对象的信息及其占用量。
    jstat -util pid:统计gc信息统计。
    jstat -printcompilation pid:当前VM执行的信息。
    除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值