spring boot服务器内存不足排查

一、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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值