查看java项目线程运行情况,以及总线程数

观看tomcat线程或者其他java程序线程数量以及运行情况,可以查看

jdk/bin/jvisualvm.exe当前文件是用来监控线程运行信息

有时候系统报异常:如下:

java.lang.OutOfMemoryError: unable to create new native thread

可以加上日志打印,辅助查找线程出错地点。

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

public class Test {
public static void main(String[] args){
//调用线程信息日志存放路径
myThread d = new myThread(“d://”);
d.start();
}
}
class myThread extends Thread{
String file;
public myThread(String f){
this.file = f;
}

public void run(){
while(true){

File f = new File(file+"//"+new SimpleDateFormat(“yyyy-MM-dd_HH时mm分ss秒”).format(new Date())+".log");
StringBuffer buf = new StringBuffer();
FileWriter fw = null;
try{
//获取所有运行中的线程
Map<Thread,StackTraceElement[]> map = Thread.getAllStackTraces();
buf.append(" ******当前时间"+new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”).format(new Date())+“共有”+map.size()+“个线程 *********\r\n”);
buf.append("\r\n内存信息:maxMenory:"+Runtime.getRuntime().maxMemory()/1000+“kb freeMemory:”+Runtime.getRuntime().freeMemory()/1000+“kb totalMemory:”+Runtime.getRuntime().totalMemory()/1000+“kb”);
int tlen = 1;
//迭代线程
for(Thread t:map.keySet()){
buf.append("\r\n 第"+tlen+++“个线程的名称:”+t.getName()+" 共有"+map.get(t).length+“个执行元素”);
buf.append("=====================================\r\n");
buf.append(" 线程的状态:"+t.getState());
buf.append(" 线程是否活动状态:"+t.isAlive());
buf.append(" 线程是守护线程:"+t.isDaemon());
buf.append(" 线程字符串表示形式:"+t.toString()+"\r\n");
StackTraceElement[] el = map.get(t);
int elen = 1;
//每个线程执行的任务动作
for(StackTraceElement e:el){
buf.append(" 第"+elen+++“个元素的限定名:”+e.getClassName()+"\r\n");
buf.append(" 源文件名:"+e.getFileName()+"\r\n");
buf.append(" 字符串表示形式:"+e.toString()+"\r\n");
}
}
fw = new FileWriter(f);
fw.write(buf.toString());
fw.flush();
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if(fw!=null)
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try{
Thread.sleep(1200000);
}catch(Exception e){
e.printStackTrace();
}
}
}
}