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就是线程号的十六进制
1.start.bat
- @echo off
- for /f "tokens=1,2 delims==" %%i in (.\config.ini) do (
- if "%%i"=="Xms" set Xms=%%j
- if "%%i"=="Xmx" set Xmx=%%j
- if "%%i"=="Xmn" set Xmn=%%j
- if "%%i"=="gcPath" set gcPath=%%j
- if "%%i"=="projectName" set projectName=%%j
- if "%%i"=="configPath" set configPath=%%j
- if "%%i"=="realTimePath" set realTimePath=%%j
- )
- echo check variable_1: Xms=%Xms%
- echo check variable_2: Xmx=%Xmx%
- echo check variable_3: Xmn=%Xmn%
- echo check variable_6: gcPath=%gcPath%
- echo check variable_7: projectName=%projectName%
- echo check variable_8: configPath=%configPath%
- echo check variable_9: realTimePath=%realTimePath%
-
- javaw -Xms%Xms% -Xmx%Xmx% -Xmn%Xmn% -Xloggc:%gcPath% -jar %projectName% --spring.config.location=%configPath% >> %realTimePath% 2>&1 &
- pause
2.stop.bat
- @echo off
- for /f "tokens=1,2 delims==" %%i in (.\config.ini) do (
- if "%%i"=="projectName" set projectName=%%j
- if "%%i"=="projectPort" set projectPort=%%j
- )
- echo check variable_1: project_name=%projectName%
- echo check variable_2: project_port=%projectPort%
-
- set port=%projectPort%
- for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do taskkill /pid %%m -t -f
- exit
3.config.ini
- [default]
- ; 设置初始堆大小,物理内存的1/64
- Xms=2g
- ; 最大堆大小,物理内存的1/4
- Xmx=8g
- ; 年轻代大小
- Xmn=3g
- ; gc日志文件路径
- gcPath=logs\gc.log
- ; 项目包
- projectName=test.jar
- ; 项目启动端口,对应这yml文件的端口,关闭项目使用
- projectPort=8080
- ; 依赖文件路径
- configPath=config\
- ; 实时日志输出路径
- realTimePath=logs\nohup.log