`
jjs_love
  • 浏览: 79384 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

查看java进程中哪个线程在消耗系统资源

    博客分类:
  • JAVA
阅读更多

引用 http://thinkingquest.blog.163.com/blog/static/20367717520122753048511/ 

jps或ps -ef|grep java可以看到有哪些java进程,这个不用说了。
但值得一提的是jps命令是依赖于/tmp下的某些文件的。 而某些操作系统,定期会清理掉/tmp下的文件,导致jps无法查看到实际存在的java进程。不过jstat, jstack等命令也同样如此,所以当jps列不出进程的时候,这些命令也都不能用了。不在我们此次讨论范围之内。

top -p $pid -H  加上-H这个参数后,会列出有哪些线程。这样就可以看到哪个线程id最消耗系统资源了。
看到的线程id是10进制的数字。

jstack $pid 可以打印出制定java进程的stack状况。

将前边top命令看到的线程id转为16进制显示,就可以在jstack的结果中找到它了。

例如以下:
"pool-2-thread-1" prio=10 tid=0x000000004c9b2000 nid=0x11f4 waiting on condition [0x0000000042f36000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x0000000580089050> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
        at java.lang.Thread.run(Thread.java:662)


其中的“nid=0x11f4 ”, 11f4就是线程id的16进制表示

分享到:
评论

相关推荐

    Java与线程.pdf

    线程是比进程更轻量级的调度执行单位,它可以将一个进程的资源分配和执行调度分开,既可以共享进程资源,又可以独立调度。线程的实现有两种方式:用户线程和内核线程。 用户线程是在用户态中实现的,不需要内核的...

    Java-学习多线程总结上

    每一个正在执行的程序都是一个进程,资源只有一块,所以在同一时间段会有多个程序同时执行,但是在一个时间点上,只能由一个程序执行,多线程是在一个进程的基础之上的进一步划分,因为进程的启动所消耗的时间是非常...

    Java线程池示例代码.zip

    线程池的作用: ...可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)

    Java并发编程(学习笔记).xmind

    (2)建模简单:通过使用线程可以讲复杂并且异步的工作流进一步分解成一组简单并且同步的工作流,每个工作流在一个单独的线程中运行,并在特定的同步位置交互 (3)简化异步事件的处理:服务器应用程序在接受...

    java 面试题 总结

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    JAVA面试题最全集

    在软件开发生命周期中的哪个阶段开始测试? 89.dotnet与J2EE的比较? 90.什么是ActiveX? 91.Java中IDL是什么? 92.ISO9000和CMM是什么?IS09000和CMM(软件能力成熟度模型)认证是国际上通用的软件质量评估方法.CMM的...

    Java课程设计项目实例《基于微服务的在线签到》子系统.pdf

    2)系统资源无法隔离 由于在整个单体系统中的各个功能模块都依赖于同样的资源文件、系统库、内存等资 源,一旦某个功能模块对相关的资源如果使用不当,整个应用系统都有可能会崩溃。扩展 能力受限:单体应用只能...

    超级有影响力霸气的Java面试题大全文档

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    关于JAVA面试的100题及其答案

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    Java并发的初步思考??同步实现及比较

     线程运行的环境是进程内,线程由进程创建,其本身并不占有系统资源而只有一点在运行中必不可少的资源(堆栈、当前指令指针、寄存器组合等)。当然,不占用不代表不使用,而这种不占用式的使用成了名副其实的...

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    Java高并发高性能分布式框架从无到有微服务架构设计(1).doc

    还有就是从最基础的地方优化我们写代码减少不必要的资源浪费:不要频繁的new对 象,对于在整个应用中只需要存在一个实例的类使用单例模式.对于String的连接操作,使 用StringBuffer或者StringBuilder.对于utility类型...

    进销存系统文档作业例子

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    IIS6.0 IIS,互联网信息服务

    四、在Vista系统中安装IIS7.0相对于早先的版本,IIS 7.0 带来了许多引人注目的新特色新功能,比如基于 Microsoft .NET Framework 的全局配置文件,可简单地通过文本编辑器或 Microsoft Visual Studio 编辑;...

    nodejs-contagious:一对多inotify事件驱动的异步文件系统同步守护程序

    此外,守护程序运行时几乎没有任何开销,消耗的资源也很少。 异步特性使rsync任务可以串联完成,而不会中断inotify观察程序进程,从而使其在多个服务器之间高效同步大量文件。 特征 一对多复制 基于Rsync SSH密钥的...

    ORACLE9i_优化设计与系统调整

    第一部分 ORACLE系统优化基本知识 23 第1章 ORACLE结构回顾 23 §1.1 Oracle数据库结构 23 §1.1.1 Oracle数据字典 23 §1.1.2 表空间与数据文件 24 §1.1.3 Oracle实例(Instance) 24 §1.2 Oracle文件 26 §1.2.1...

    易语言程序免安装版下载

    3) 修改核心库中“播放音乐”命令在没有声卡或声卡被禁用时未正确释放资源的BUG 4) 修改静态编译后“读配置项”命令在第三个参数“配置项名称”为空文本时导致程序崩溃的BUG 5) 修改高级选择夹中的组件在窗口载入...

Global site tag (gtag.js) - Google Analytics