一、top使用讲解:
1、top命令显示视图说明:
第一行: top - 11:20:27 up 71 days, 1:21, 4 users, load average: 0.08, 0.03, 0.05
- 11:20:27:代表时间
- 71 days, 1:21:系统已经运行时间
- 4 users: 当前有4个用户登录系统
load average: 0.08, 0.03, 0.05:load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况,
注意:load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
第二行:Tasks: 121 total, 1 running, 120 sleeping, 0 stopped, 0 zombie
- 121 total:任务(进程),系统现在共有121个进程。
- 1 running:运行1个。
- 120 sleeping:休眠120个。
- 0 stopped:停止0个。
- 0 zombie:僵尸的有0个。
第三行CPU状态:%Cpu(s): 0.0 us, 3.2 sy, 0.0 ni, 96.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- 0.0 us:用户空间占用CPU的百分比。
- 3.2 sy:内核空间占用CPU的百分比。
- 0.0 ni: 改变过优先级的进程占用CPU的百分比。
- 96.8 id:空闲CPU百分比。
- 0.0 wa: IO等待占用CPU的百分比。
- 0.0 hi:硬中断(Hardware IRQ)占用CPU的百分比。
- 0.0 si: 软中断(Software Interrupts)占用CPU的百分比。
第四行:内存状态 KiB Mem : 3880188 total, 2155184 free, 1366012 used, 358992 buff/cache
- KiB:内存单位K
- 3880188 total:物理总内存。
- 2155184 free:空闲内存。
- 1366012 used:使用中的内存。
- 358992 buff/cache:缓存的内存量 。
第五行:swap交换区 KiB Swap: 0 total, 0 free, 0 used. 2262420 avail Mem
- 0 total:交换区总量。
- 0 free:空闲交换区总量。
- 0 used. 使用量。
- 2262420 avail Mem:可交换量。
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
其中可用内存计算:
第四行的free + 第四行的buffers/cached ,按这个公式此台服务器的可用内存:2155184+358992 = 4.7GB。
2、top各进程(任务)的状态监控:
- PID — 进程id
- USER — 进程所有者
- PR — 进程优先级
- NI — nice值。负值表示高优先级,正值表示低优先级
- VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
- RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
- SHR — 共享内存大小,单位kb
- S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
- %CPU — 上次更新到现在的CPU时间占用百分比
- %MEM — 进程使用的物理内存百分比
- TIME+ — 进程使用的CPU时间总计,单位1/100秒
- COMMAND — 进程名称(命令名/命令行)
3、多U多核CPU监控
在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况:
4、top默认的排序列是“%CPU”
通过”shift + >”或”shift + <”可以向右或左改变排序列,下图是按一次”shift + >”的效果图
视图现在已经按照%MEM来排序了。
5、使用top命令后,按f, 可以选择相关参数,按d标示 是否显示,按q标示退出
6、top然后按m,显示内存剩余大小:
7、 top -p 进程号 -H 查看进程下的线程
8、jstack -l 15683 (pid) 查看进程下的所有堆栈信息
- jstack -l 15683 > 15683 .txt将堆栈信息保存在本地
- printf "%x" 15739 将线程的10进制转换成16进程
在15683.txt查看到对应堆栈信息:
Locked ownable synchronizers:
一个可持有的同步器多半是线程独有并且使用了AbstractOwnableSynchronizer(或是其子类)去实现它的同步特性,ReentrantLock与ReentrantReadWriteLock就是JAVA平台提供的两个例子。
二、监控java线程数
ps -eLf | grep java | wc -l
netstat -n | grep tcp | grep 9088 | wc -l
监控网络客户连接数:
三、物理内存占用排序
ps -aux --sort -rss |head 列出进程拿物理内存占用排序 使用ps aux 查看系统进程时,第六列即 RSS列显示的就是进程使用的物理内存。
ps aux --sort=-rss (rss查看内存量)
四、查看系统内存情况
free -m
total: 本机共有多少内存
used: 本机已消耗的内存
free: 本机空闲的内存
五、限制启动服务启动量
java -Xms256m -Xmx512m