• [案例] java项目故障诊断和性能调优(Linux版)


    一、问题排查

    1.使用命令查出java程序,并获取到java的pid : top 或  jps  或ps -ef | grep java

    2.使用java命令输出线程栈信息:jstack -l 12488 | tee -a jstack.log

    3.使用 top -H -p  12488 找出进程中线程占用cpu最高的PID

    4.将cpu占用最高的线程pid转为16进制 :30C8

    5.编辑jstack.log:   vi  jstack.log

            按下”/“键,这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了。找到相关文字以后:
    (1)按下小写n,向下查找
    (2)按下大写N,向上查找

    6.在文件里查找线程编号30C8

    备注: nid=0x6b29中的6b29就是线程号的十六进制

    二、自动设置java程序启动参数

    1.start.bat

    1. @echo off
    2. for /f "tokens=1,2 delims==" %%i in (.\config.ini) do (
    3. if "%%i"=="Xms" set Xms=%%j
    4. if "%%i"=="Xmx" set Xmx=%%j
    5. if "%%i"=="Xmn" set Xmn=%%j
    6. if "%%i"=="gcPath" set gcPath=%%j
    7. if "%%i"=="projectName" set projectName=%%j
    8. if "%%i"=="configPath" set configPath=%%j
    9. if "%%i"=="realTimePath" set realTimePath=%%j
    10. )
    11. echo check variable_1: Xms=%Xms%
    12. echo check variable_2: Xmx=%Xmx%
    13. echo check variable_3: Xmn=%Xmn%
    14. echo check variable_6: gcPath=%gcPath%
    15. echo check variable_7: projectName=%projectName%
    16. echo check variable_8: configPath=%configPath%
    17. echo check variable_9: realTimePath=%realTimePath%
    18. javaw -Xms%Xms% -Xmx%Xmx% -Xmn%Xmn% -Xloggc:%gcPath% -jar %projectName% --spring.config.location=%configPath% >> %realTimePath% 2>&1 &
    19. pause

    2.stop.bat

    1. @echo off
    2. for /f "tokens=1,2 delims==" %%i in (.\config.ini) do (
    3. if "%%i"=="projectName" set projectName=%%j
    4. if "%%i"=="projectPort" set projectPort=%%j
    5. )
    6. echo check variable_1: project_name=%projectName%
    7. echo check variable_2: project_port=%projectPort%
    8. set port=%projectPort%
    9. for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do taskkill /pid %%m -t -f
    10. exit

    3.config.ini

    1. [default]
    2. ; 设置初始堆大小,物理内存的1/64
    3. Xms=2g
    4. ; 最大堆大小,物理内存的1/4
    5. Xmx=8g
    6. ; 年轻代大小
    7. Xmn=3g
    8. ; gc日志文件路径
    9. gcPath=logs\gc.log
    10. ; 项目包
    11. projectName=test.jar
    12. ; 项目启动端口,对应这yml文件的端口,关闭项目使用
    13. projectPort=8080
    14. ; 依赖文件路径
    15. configPath=config\
    16. ; 实时日志输出路径
    17. realTimePath=logs\nohup.log

  • 相关阅读:
    模拟电路设计(34)---脉宽调制型开关电路
    计算机毕业设计之java+springboot基于vue的农机电招平台
    Java IO流 要点
    android linkToDeath内存泄露分析
    SpringBoot项目打印接口请求日志,CommonsRequestLoggingFilter实现方式
    MyBatis笔记——多对一映射问题解决
    Stokes‘ theorem
    C语言初学3:变量和常量
    驱动开发:内核监控Register注册表回调
    【Proteus仿真】【STM32单片机】太阳能热水器控制系统设计
  • 原文地址:https://blog.csdn.net/weixin_41427294/article/details/127696369