程序运行前的系统情况(top)
程序运行一段时间后的系统情况(top)
定位线程第一种方式
查看具体进程
使用ps -ef |grep 31857 |grep -v grep查看具体的进程信息或使用jps -l查看运行的Java进程
ps -ef |grep 31857|grep -v grep
jps -l
查看进程中的具体线程
ps -mp 31857-o THREAD,tid,time
定位线程第二种方式
首先使用top只查看CPU高的进程
top -p 31857
然后按shrit+H查看进程31857下的线程情况
将线程ID转成16进制(注意小写)
将线程ID转成16进制是因为查看jstack信息时要用这个字符串去查找。
printf "%x\n" 31858
使用jstack查看线程的堆栈信息
-A60表示只查看前60行
jstack 31857| grep 7c72 -A60
注:上述命令中使用top和ps查看到的进程ID和线程ID都是十进制,只有在使用jstack查找线程信息的时候,才将线程ID转成小写的16进制。
附录:程序代码
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Test {
public static void main(String[] args) {
while(true) {
new MD5Test().md5Test();
}
}
public String md5Test() {
MessageDigest messageDigest;
try {
messageDigest = MessageDigest.getInstance("MD5");
byte[] digest = messageDigest.digest("123456".getBytes());
// E10ADC3949BA59ABBE56E057F20F883E
return toHex(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "digest error";
}
private String toHex(byte[] data) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.length; i++) {
String hex = Integer.toHexString(data[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
}