Java进程CPU100%的问题

摘要:
今天review了一下测试环境,后来发现一个java进程CPU120%多,4核的CPU,很多人都没感觉。但是确实是很大问题。测试环境没什么并发,也没什么数据量怎么会这么高的cpu呢?找到java进程中耗cpu最高的nid,top–ppid–H用jstack或者其他方式打印一下线程堆栈,从堆栈记录里找出nid,对应的线程和他的堆栈。找到出问题的方法。Java代码while{while{try{finalStringmessage=String.valueOf;}}while{while{try{finalStringmessage=String.valueOf;}}本来blockingqueue的目的是空的时候,让线程堵住。现在他完全没用到,改成了让CPU空转,使得CPU100%。另外需要将poll改成take或者加上timeout。

今天review了一下测试环境,后来发现一个java进程CPU 120%多,4核的CPU,很多人都没感觉。但是确实是很大问题。测试环境没什么并发,也没什么数据量怎么会这么高的cpu呢?

找到java进程中耗cpu最高的nid,

top –p pid –H

用jstack或者其他方式打印一下线程堆栈,从堆栈记录里找出nid,对应的线程和他的堆栈。找到出问题的方法。有这么一段代码。

Java代码 复制代码收藏代码Java进程CPU100%的问题第3张
  1. while (true) {
  2. while (blockingDeque.size() > 0) {
  3. try {
  4. final String message = String.valueOf(blockingDeque.poll());
  5. }
  6. }
while (true) {            while (blockingDeque.size() > 0) {                try {                    final String message = String.valueOf(blockingDeque.poll());}}

本来blockingqueue的目的是空的时候,让线程堵住。让出CPU资源。现在他完全没用到,改成了让CPU空转,使得CPU 100%。另外需要将poll改成take或者加上timeout。代码还是要经常去review。

免责声明:文章转载自《Java进程CPU100%的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇清北学堂清华大学钟皓曦神仙讲课day3摘要从淘宝和网易的font-size思考移动端怎样使用rem?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

基于H5的混合开发介绍(一)WebView

转自: https://www.cnblogs.com/sanchang/p/9261461.html 一 WebView到底是什么      1 WebView是一种控件,它基于webkit引擎,因此具备渲染Web页面的功能。     2 基于Webview的混合开发,就是在 Anddroid os(安卓)/I os(苹果)原生APP里,通过WebVie...

利用select/poll监听多个设备详解

如果一个应用程序去处理多个设备,例如应用程序读取网路数据,按键,串口,一般能想到的有三种方法: 方法1:串行+阻塞的方式读取:while(1) { read(标准输入);read(网络);}缺点:每当阻塞读取标准输入时,如果用户不进行标准输入的操作,而此时客户端给服务器发送数据,导致服务器无法读取客户端发送来的数据! 方法2:采用多线程或者多进程机制来实现...

RestTemplate 工具类以及拦截器配置打印调用日志

RestTemplate工具类 /** * RestTemplate 远程调用工具类 */ public class RestTemplateUtil { private static final RestTemplate restTemplate = SpringContextHolder.getBean(RestTemplate.class...

strchr,wcschr 和strrchr, wcsrchr,_tcschr,_tcsrchr功能

       strchr,wcschr 和strrchr, wcsrchr,_tcschr,_tcsrchr功能 (1) char *strchr( const char *string, int c );wchar_t *wcschr( const wchar_t *string, wchar_t c );Find a character in...

android源码framework下添加新资源的方法

编译带有资源的jar包,需要更改frameworks层,方法如下:   一.增加png类型的图片资源   1.将appupdate模块所有用到的png格式图片拷贝到framework/base/core/res/res/drawable-mdpi里。但是要确保没有与原生的没有重名文件。   2.在framework/base/core/res/res/...

Flutter实战视频-移动电商-39.路由_Fluro的路由配置和静态化

39.路由_Fluro的路由配置和静态化 handler只是单个路由的配置,这节课我们要学习路由的整体配置 整体配置 新建routers.dart文件来做整体配置 detailsHandler就是我们在router_handler里面定义的detailsHandler 当路由不存在的时候,给用户一个反馈。router.notFoundHandler 这...