java进程cpu
㈠ 如何让java更好的利用多cpu
几个意见大致如下,第一,不能,因为“进程是CPU进行调度的单位,而JVM是一个进程,于是就只能跑在一个CPU上”。第二,“进程是CPU进行调度的单位,这没错,但是OS负责将一个进程在不同的CPU上调度到另外一个CPU上,而这个进程,则是由不同的线程构成的,那么说,线程还是在不同的CPU上运行了”。我更倾向于第二种解释,于是核心问题就变成了讨论“JVM能不能够将线程安排到不同的CPU上去运行呢?”。
最终,在SUN公司授权的《Java核心技术》,第7版卷II,第8版卷I,有关于“可运行线程”中,找到如下两句话:
“今天,人们很可能有单台拥有多个CPU的计算机,但是,并发执行的进程数并不是CPU数目制约的。操作系统的时间片分配给每一个进程,给人并行处理的感觉”。
好吧,上面的这句话,并不能说明这个答案,但是当我看到下面的这句原话的时候,感觉答案就在这里了:
"在具有多个处理器的机器上,每一个处理器运行一个线程,可以有多个线程并行运行。当然,如果线程的数目多于处理器的数目,调度器依然采用时间片机制"。这句话足以用来反驳那个出问题的人了,因为他的答案本身就是错的。
尽管,尽信书不如无书,但是,还能有更好的选择么?带着这个问题,继续走下去~ Fighting~ [email protected] I enjoy PM、Java、Oracle. I'm an English lover as well~ ho ho~
后记:
更详细的信息可以参见有关Java虚拟机实现的“并发”系列讲解,基本上每本关于Java虚拟机有关的书籍以及官方文档都会讲到JVM如何实现线程的几种方式。 基于系统内核,基于用户线程等等实现。JVM中的线程实现是本地化的~ 本地化的意思就是与平台有关了,尽管与平台有关,但是线程调度,仍旧是最佳高效的方式,有资料曾说过:线程的创建销毁与调度的开销是进程的三十分之一。
㈡ 查看JAVA进程中哪个线程CPU消耗最高
2.1 导出java运行的线程信息
jstack 进程id(jps查看)
jstack 进程id > ps.txt
jstack -l 进程id (窗口打印)
//另外还有一种方式
如果启动方式如下:
nohup java -classpath conf/:my.jar com.tank.manClass>./log.out 2>&1 &
则执行:kill -3 PID,进程信息会输出到/log.out
2.2 查找最消耗cpu的java线程
jps
找到java进程PID
命令:ps -mppid-o THREAD,tid,time 或者 ps -Lfppid
通过%CPU和 TIME,判断占用的线程TID
找到TID,转换成16进制,然后在上面(jstack 进程id > ps.txt)导出的文件中搜索,就可以定位到具体的线程,类。
㈢ java进程占用cpu高,不知道是什么进程
用linux命令
top可以查询各个进程占用CPU的使用情况,找到command为Java的使用占用CPU高的相应的PID,然后用命令:ps
-ef|grep
Pid
此pid为你查询到的pid,就可以知道是哪个Java进程了
㈣ Java程序CPU占用过高怎么解决
Java程序就是这样的,我去年做了一个桌面软件,也出现这样的问题,后来不用java的自动垃圾回收,在必要的时候手动调用System.gc(),这种情况就很少出现了,但是偶尔也还有。另外,CPU占用率过高的情况一般是编程的问题,重点考虑线程资源共享和网络流处理两个方面,java大部分的高CPU占用率都跟这两点有关系。
㈤ Java中CPU占用过高问题如何解决
方法1
1.jps 获取Java进程的PID。
2.jstack pid >> java.txt 导出CPU占用高进程的线程栈。
3.top -H -p PID 查看对应进程的哪个线程占用CPU过高。
4.echo “obase=16; PID” | bc 将线程的PID转换为16进制,大写转换为小写。
5.在第二步导出的Java.txt中查找转换成为16进制的线程PID。找到对应的线程栈。
6.分析负载高的线程栈都是什么业务操作。优化程序并处理问题。
方法2
1.使用top 定位到占用CPU高的进程PID
top
通过ps aux | grep PID命令
2.获取线程信息,并找到占用CPU高的线程
ps -mp pid -o THREAD,tid,time | sort -rn
3.将需要的线程ID转换为16进制格式
printf "%x\n" tid
4.打印线程的堆栈信息
jstack pid |grep tid -A 30
㈥ linux有一个java进程cpu达到100,怎么回事,程序进程多
cpu使用率高的原因及解决方法:
第一、杀毒软件,常见的金山、瑞星杀毒软件会对网页、插件等进行监控,这样就增大了系统负担,自然也就会造成cpu使用率高。
第二、驱动不达标,现在人们使用的驱动有几大一部分是属于测试版的驱动,这一类驱动并不合格,它可以造成CPU100%的使用率,而且不容易发觉。
第三、病毒木马,病毒在系统内部复制,必然造成极高的cpu占有率;
第四、网络链接,这是最直接的客观原因,主要是网络连接不稳定。
第五、启动项太多,一般来说开机启动项过多,就会增加cpu的使用率,增加其荷载。
第六、桌面尽量少放文件,在桌面上放过多的文件,极大的占用cpu,造成使用率过高。
第七、软件本身需要占有很高的CPU,比如一览器;有时有的软件和系统会有点不兼容。
第八、“svchost”进程影响,svchost.exe是系统的一个核心进程,svchost.exe有时非常令人头痛,如果看到某个svchost.exe占用很大CPU,这时可以去下aports或者fport来检察其对应的程序路径,看下是不是有程序调用svchost.exe。
第九、右击文件100%扥使用率,这个也是非常常见,在官方解释也很有意思。
第十、cpu温度过高,证明cpu本身就是出于不正常运行,自然也就会导致异常。
第十一、word文件过大,cpu对其拼写和语法检查过度。
㈦ Java的多线程和CPU
CPU对于各个线程的调度是随机的(分时调度),而在Java中,JVM负责线程的调度,可更好地分配CPU的使用权。对于线程的调度一般有两种模式,分时调度和抢占式调度。分时调度是按照顺序平均分配;抢占调度是按照优先级来进行分配。
㈧ java程序占用CPU极高,请问是怎么回事
多线程最容易造成资源死锁的,查查看那个没有释放资源~!还有缓冲池设置够不够大~!垃圾处理机制也要检查~!
㈨ Java如何定位占用CPU比较高的问题
一、确定消耗CPU的Java进程
备注:
1、jstack 输出的堆栈信息,线程id对应的16进制为小写,查找时要统一按照小写方式查找
2、jstack输出为当前瞬间的堆栈信息,如果遇到间断性出现CPU高的问题时,需要多输出几次
从上面方式定位到代码Test.main(Test.java:4)处导致了CPU偏高的问题,那我们查看下代码具体如何实现的?
代码实现:
public class Test {
public static void main(String[] args) {
while(true) {
}
}
}
从代码层面看该处实现了一个死循环,所以导致了线程占用CPU偏高的问题。