JVM性能调优实践——JVM篇

本文介绍了如何在Docker容器中进行JVM性能调优,包括如何调整Docker容器的权限以使用JVM调优工具,如jmap。通过TOP命令和ps -ef定位问题服务进程,然后利用jps、jstat、jmap和jstack进行JVM问题排查。同时,文章提到了JDK自带的Java Mission Control (JMC)和Java Flight Recorder (JFR)作为性能分析工具,帮助进行内存、线程和GC的实时监控。
摘要由CSDN通过智能技术生成

前言

在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践——性能指标分析

JVM的调优和故障处理可以使用JDK的几个常用命令工具。因为本文是基于Docker容器内部的Springboot服务。需要调整一下docker容器的启动参数,才可以使用jmap等工具。jmap命令需要使用Linux的Capability的PTRACE_ATTACH权限。而Docker自1.10在默认的seccomp配置文件中禁用了PTRACE_ATTACH。目前使用的Docker version是17.04.0-ce。支持的Capability列表可以详看runtime-privilege-and-linux-capabilities。 
调整Capability的方式也比较方便。可以如下直接在运行参数后面加 cap_add,cap-drop

$docker run --cap-add=ALL --cap-drop=MKNOD ...
  • 1

也可以在compose中增加:

   cap_add:
     - ALL
   cap_drop:
     - NET_ADMIN
     - SYS_ADMIN
  • 1
  • 2
  • 3
  • 4
  • 5

Docker容器中的服务进程

在排查问题时,一般是先通过JVM性能调优实践——性能指标分析中的几个命令来分析基础的服务器状态和信息。在微服务架构中,每台服务器部署着若干运行着服务的容器。在不能通过应用日志或者问题现象定位问题服务时,需要找到问题容器。 
先通过TOP命令找到耗费关键资源的进程。

top - 11:45:13 up 318 days, 20:43,  2 users,  load average: 0.15, 0.19, 0.18
Tasks: 172 total,   1 running, 171 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.1 us,  1.9 sy,  0.0 ni, 94.7 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem:   8175392 total,  7868636 used,   306756 free,   204400 buffers
KiB Swap:        0 total,        0 used,        0 free.   849564 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                
31399 root      20   0 3585612 806804  12228 S   3.0  9.9 548:20.94 java                                                                   
 6331 root      20   0 3445612 925660  15784 S   2.7 11.3  41:40.29 java                                                                   
31122 root      20   0 3460712 888776  11568 S   2.0 10.9 484:19.31 java                                                                   
31147 root      20   0 3288180 811476  12748 S   1.3  9.9 263:44.73 java                                                                   
 8506 root      20   0 3254088 750880   6116 S   1.0  9.2 760:45.19 java                                                                   
22940 root      20   0 1029012  70584  23396 S   0.7  0.9   0:10.68 node                                                                   
24550 root      20   0 1229088  43096   8712 S   0.7  0.5 160:15.74 node                                                                   
    7 root      20   0       0      0      0 S   0.3  0.0 606:49.74 rcu_sched                                                              
  454 sshd      20   0   32792   1924    188 S   0.3  0.0  29:15.40 nginx                                                                  
13721 root      20   0   25396   1956   1324 S   0.3  0.0  56:29.17 AliYunDunUpdate                                                        
16225 root      20   0 3072752 429296   6848 S   0.3  5.3  42:51.01 java                                                                   
20795 root      20   0 2408848  75344   3960 S   0.3  0.9   2361:22 java                                                                   
23581 root      20   0   16736   2676   2196 R   0.3  0.0   0:00.01 top                                                                    
31352 root    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值