页面树结构
转至元数据结尾
转至元数据起始

使用背景:

一般应用于服务器繁忙或是无响应时,我们需要看一下线程的状态和详细信息。 

注意事项:

先不要重启服务器在服务器无响应的时候执行下面获取步骤。

执行ThreadDump.cmd\ThreadDump.sh生成日志

如果是使用Smartbi的安装包部署的,打开<smartbi>\Tomcat\bin目录并双击ThreadDump.cmd就可以生成线程堆栈日志文件。

如果单独使用war部署或Tomcat\bin目录中不存在ThreadDump.cmd,可以点击下载ThreadDump.cmd(Linux系统使用文件:ThreadDump.sh)和ThreadDump.jar,并放到Tomcat\bin目录中,先在cmd添加“cd tomcat\bin目录”,然后右键使用管理员身份执行该cmd文件生成线程堆栈(注意:请将ThreadDump.cmd或ThreadDump.sh文件中的jdk路径修改为服务器上的jdk路径)

使用Linux系统时将ThreadDump.sh和ThreadDump.jar通过FTP、SFTP等上传到Tomcat/bin目录中,通过SSH等连接到服务器进入Tomcat/bin目录并执行chmod 755 ThreadDump.sh令它可执行,再执行./ThreadDump.sh生成日志。

 

如果通过上述命令无法正常获取线程堆栈日志,请再以下步骤操作。

执行命令行获取线程堆栈信息

Windows

一、线程信息

请在服务器无响应时,执行打印进程信息,打印线程信息有两个方法:

方法一

要求JDK版本为1.6及其以上版本。

1、在运行中打开cmd命令行窗口。

2、在cmd窗口进入JDK的bin目录下,执行jps获取进程信息,此处要保证执行的JDK是服务器使用的JDK。

     如命令行:cd C:\Smartbi_Insight\jdk\bin

                     jps

3、获取对应线程号,然后执行jstack +进程号 > 进程号.log 获取线程信息 :Tomcat显示的名称应该是Bootstrap;

4、可以在 C:\Smartbi_Insight\jdk\bin 目录下看到生成的线程文件。

方法二

1、通过CMD命令行窗口进入JDK的bin目录下

2、使用netstat -ano|find "访问的端口号"|find "LISTENING" 获取进程号(注意双引号是必须的)

     如访问smartbi的端口号是18080,则输入命令:netstat -ano|find "18080"|find "LISTENING"

3、再使用jstack 进程号 >进程号.log 获取线程信息,如果提示无法连接到JVM,可以增加-F参数强制生成jstack -F 进程号 >进程号.log

上边截图获取到进程号是7280,可输入命令行:jstack 7280 >7280.log

或者:输入命令行:jstack -F 7280 >test.log

方法三

1、进入jdk/bin,执行jvisualvm.exe

2、找到对应的线程号,然后进入线程 --> 线程 dump

3、将线程信息复制到文本发回即可


二、 堆dump文件

1、同“一、线程信息”打印线程信息步骤一样,需要先进入对应的JDK的bin目录下,通过jps或netstat获取Java进程号:

2、在JDK的bin目录运行【jmap -histo:live 进程号 >进程号.map】

     假设获取到的进程号是7280,则输入命令行为:jmap -histo:live 7280 >7280.map

 

3、 反馈文件以跟踪问题

4、若条件允许,生成整个堆Dump文件【jmap -dump:live,format=b,file=进程号.bin 进程号】

     如输入命令行:jmap -dump:live,format=b,file=7280.bin 7280

5、该文件非常大,与Java进程的运行内存一样的大,必须压缩以后再反馈

注:反馈以上的信息有助于解决系统无响应的问题。

三、GC参数

1、在JDK的bin目录中运行【jstat -gcutil 进程号 5000 1000】

2、若最后一段GCT段(GC所花费的总时间)在持续快速增加则表示服务器的内存已经不足,若只是少量增加是正常现象:

Linux

一、线程信息

执行命令行生成日志:

1)另外启动一个xshell连接窗口,进入到JDK的路径下(不知道如何选择适合的JDK,可看最下边备注信息),如:

2)进入到 /app/jdk1.7.0_79/bin 目录下,并输入 jps 命令,Tomcat显示的名称Bootstrap;

    如命令行:cd /app/jdk1.7.0_79/bin

                     jps

3)在窗口继续输入 jstack 7453(就是输入第二步命令获取到的tomcat的线程号),开始打印线程 (这一步也可以直接跳过进行第四步操作)

4)将线程信息输出,如输出到home 路径下,输入命令为 jstack 7453 >> /home/2.txt

这时候就会在服务器上home目录下生成对应的文件了,如下图,将这个文件发回分析。

二、堆Dump文件

1、同“一、线程信息”打印线程信息步骤一样,需要先进入对应的JDK的bin目录下,通过jps获取Java进程号 , Tomcat显示的名称应该是Bootstrap:

2、在JDK的bin目录运行,可生成完整堆文件 .bin文件 【jmap -dump:live,format=b,file=进程号.bin 进程号】

     如输入命令行: jmap -dump:live,format=b,file=7453.bin 7453

3、该文件非常大,与Java进程的运行内存一样的大,必须压缩以后再反馈

注:反馈以上的信息有助于解决系统无响应的问题。


另,堆Dump文件还有一个map文件,为简要堆文件,但一般情况用处不大(只能看出大概的内存占用总数,无法看具体报表占用的详细信息)。

4、【jmap -histo:live 进程号 >进程号.map】

     假设获取到的进程号是7453,则输入命令行为:jmap -histo:live 7453 >7453.map  

     这样会在JDK的bin目录下直接生成相应文件:

5、 反馈文件以跟踪问题


三、GC参数

1、在JDK的bin目录中运行【jstat -gcutil 进程号 5000 1000】

2、若最后一段GCT段(GC所花费的总时间)在持续快速增加则表示服务器的内存已经不足,若只是少量增加是正常现象:

备注

如果没有进行修改过JDK的环境变量操作,就任何JDK都可以;如果不确定是否修改过,就直接使用正在运行的JDK,具体可通过smartbi应用所在Tomcat中的bin目录下查看catalina.sh文件:

  • 无标签