引用 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 语言中,线程支持与语言运行环境结合在...
在Linux系统中,监控Java进程及其线程的CPU使用情况是进行性能调优的重要环节。以下是一些关于如何实现这一目标的关键知识点。 1. **`ps` 命令**: - `ps` 是一个用于报告当前系统中进程状态的命令。基本用法如 `...
线程之间允许任务协作和数据交换,从而在计算机系统资源消耗方面成本较低。值得注意的是,并非所有类型的计算机都支持多线程应用程序,但Java程序设计语言将线程支持与语言运行环境紧密结合,提供了多任务并发执行的...
在计算机科学中,程序、进程和线程是操作系统的基础概念,尤其在Java编程语言中,理解和掌握这些概念对于开发高效、并发的软件至关重要。本文将深入探讨Java的多线程特性,以及程序、进程和线程的基本定义和它们之间...
在实际应用中,频繁地创建和销毁线程会消耗大量系统资源。Java 5及以上版本引入了ExecutorService和ThreadPoolExecutor,它们可以帮助我们管理线程池,有效地复用线程,减少系统开销。在小球运动模拟中,可能使用...
- 线程数量的控制:过多的线程会消耗大量系统资源,应合理设置线程数量,避免过度竞争。 - 线程优先级:Java提供线程优先级机制,但通常不应过分依赖,因为调度策略由操作系统决定。 9. **死锁预防**: - 死锁是...
在Java中,一个进程可以拥有多个线程。 2. **线程创建**:Java提供两种方式创建线程,一是直接继承Thread类并重写run()方法,二是实现Runnable接口并定义run()方法,然后通过Thread类的构造函数将Runnable对象传递...
通过固定大小的线程池可以控制并发线程的数量,避免过多线程消耗过多资源。 - **并发容器**:Java并发工具包提供了一系列专门用于多线程环境下的容器类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等,这些...
- 在宏观层面,通过在同一个进程中开启多个线程,可以实现任务的并发执行。但在微观层面上,由于单个CPU在同一时刻只能执行一个线程,因此实际上各个线程是在轮换执行的,这种现象称为**伪并发**。 #### 二、启动...
- **ExecutorService**:Java提供的线程池接口,可以更有效地管理线程生命周期,减少资源消耗。 - **ThreadPoolExecutor**:线程池的具体实现,可以通过配置参数来定制线程池的行为。 - **Executors**:工具类,...
在Java编程环境中,当遇到“Java进程CPU占用率高”的问题时,这通常意味着Java应用程序在执行过程中消耗了大量计算资源,可能导致系统响应变慢,甚至出现性能瓶颈。本篇文章将深入探讨这个问题,并提供相关解决方案...
本文将深入探讨Java多线程的基础概念、基本原理及其在实践中的应用。 #### 二、核心概念 - **进程**: 是操作系统中的一个独立执行单元,拥有自己的内存空间。在多任务操作系统中,可以同时运行多个进程。 - **线程*...
在Java编程领域,多线程和网络编程是两个至关重要的概念,它们在构建高效、分布式系统中发挥着关键作用。本项目"java快递柜"是一个实际应用案例,它结合了这两个技术,旨在模拟一个能够处理并发请求并进行网络通信的...
- **控制资源消耗**:限制最大线程数,防止过多线程消耗过多资源导致系统崩溃。 - **实现**: Java通过`java.util.concurrent.ExecutorService`接口和`ThreadPoolExecutor`类提供了线程池的实现。 #### 七、实用...
- 监控系统资源,避免过度消耗CPU或内存。 以上就是使用Java实现多线程下载的核心知识点,包括线程基础、下载步骤、同步控制、异常处理、性能优化等方面的内容。实际应用中,还需要根据具体需求和环境进行适当的...
标题"java查看哪个进程切换频繁上下文"提示我们关注的是如何在Java环境中监控进程的上下文切换情况。这里有两个主要的命令工具可以帮助我们实现这一目标: 1. **pidstat**:这是一个Linux系统工具,能够提供关于...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的运行效率和资源利用率。本笔记全面涵盖了多线程的学习,包括基础理论和实践代码,旨在帮助开发者深入理解并掌握Java多线程技术。 一、...
在Java编程领域,多线程技术是实现并发执行任务的关键工具,尤其在处理实时系统如银行转账交易时显得尤为重要。银行转账涉及到多个账户之间的资金流动,这种操作通常需要高效、安全且并发地进行。本项目"java多线程...
在Java开发过程中,有时会遇到项目运行时CPU占用率达到100%的问题,这可能是由于某个线程的无限循环、阻塞或者资源消耗过大导致的。以下是一套详细的排查步骤来帮助你找出是哪个jar包的哪个线程造成了这个问题。 ...