`

多线程并发情况下造成cpu 99%排查和分析

阅读更多
问题描述:
生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。

问题分析:
1,程序属于CPU密集型,和开发沟通过,排除此类情况。
2,程序代码有问题,出现死循环,可能性极大。

问题解决:
1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出。
2,记得原来通过strace跟踪的方法解决了一台PHP服务器CPU占用高的问题,但是通过这种方法无效,经过google搜索,发现可以通过下面的方法进行解决,那就尝试下吧。

解决过程:
1,根据top命令,发现PID为2633的Java进程占用CPU高达300%,出现故障。

2,找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序:
[root@localhost logs]# ps -mp 2633 -o THREAD,tid,time | sort -rn

显示结果如下:
USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIME
root     10.5  19    - -         -      -  3626 00:12:48
root     10.1  19    - -         -      -  3593 00:12:16

找到了耗时最高的线程3626,占用CPU时间有12分钟了!

将需要的线程ID转换为16进制格式:
[root@localhost logs]# printf "%x\n" 3626
e18

最后打印线程的堆栈信息:
[root@localhost logs]# jstack 2633 |grep e18 -A 30


将输出的信息发给开发部进行确认,这样就能找出有问题的代码。
通过最近几天的监控,CPU已经安静下来了。

具体产生的原因
1.并发情况下 static变量线程不安全发生 多线程同时操作statci变量 该变量是hashmap是非线性安全的在这种情况下 hashmap put的时候进行resize会产生闭环链路 死循环
见http://coolshell.cn/articles/9606.html分析
解决方案:
1.在需要共享的代码块加同步锁 synchronized 同时使用ConcurrentHashMap代替HashMap
分享到:
评论

相关推荐

    java 多线程并发实例

    - volatile:修饰变量,确保多线程环境下的可见性和有序性,但不保证原子性。在实例中,可能用于共享标志的设置与读取。 - wait()、notify()和notifyAll():这些方法存在于Object类中,用于线程间的通信。在线程A...

    多线程并发处理的简单实现

    这种方式提高了线程的效率,因为线程不会在无事可做的情况下浪费CPU时间。 在实际应用中,Python的`concurrent.futures`模块提供了线程池的实现,如`ThreadPoolExecutor`类,可以方便地创建和管理工作者线程。Java...

    多线程并发技术

    在实践中,比如在"实战Java高并发程序设计"课程中,讲师会通过具体的案例分析和代码实战来讲解如何使用这些并发编程的新特性来解决实际问题。这个课程会教授学生如何编写高效的并发代码,如何进行并发调试,以及如何...

    WEBAPI多线程并发测试工具

    **标题与描述解析** ...以上是基于给定信息生成的API测试和多线程并发测试相关的详细知识点,涵盖了从理论基础到实践操作的多个层面。对于开发和维护高质量的Web API服务,这些知识都是必不可少的。

    基于Qt的多线程并发服务器

    "基于Qt的多线程并发服务器"是一个典型的解决方案,它利用了Qt库的强大功能,特别是其对多线程的支持,来处理来自多个客户端的并发请求。下面我们将深入探讨这个主题。 首先,Qt是一个跨平台的应用程序开发框架,...

    Linux下基于socket多线程并发通信的实现.pdf

    本文首先对socket的基本情况进行概述,然后对Linux下基于socket多线程并发通信的编程进行分析,最后提出“Linux下基于socket多线程并发通信的实现”。 在Linux系统中,socket是最基础的操作单元,可以为不同主机...

    模拟摄像头libuv支持多线程并发

    本文将深入探讨“模拟摄像头libuv支持多线程并发”这一主题,结合“模拟IPC”这一标签,以及文件名称“IpcSimulate”,我们将分析如何利用libuv库在多线程环境下实现模拟摄像头的功能。 首先,让我们了解一下什么是...

    并发服务器-多线程服务器详解

    ### 并发服务器—多线程服务器详解 #### 一、引言 在现代软件开发中,特别是网络应用和服务的设计中,对并发处理能力的需求日益增长。为了满足高并发访问的需求,开发人员常采用多线程技术来构建高效、响应迅速的...

    多线程 高并发

    通过分析和学习这些示例,我们可以更好地理解如何在实际项目中应用多线程和高并发技术。 总之,多线程和高并发是提升软件性能和扩展性的重要手段。在实践中,我们需要充分理解它们的原理,掌握相应的编程技巧,以及...

    Linux课程设计 linux下多线程并发控制的机制分析

    在Linux操作系统中,多线程并发控制是一个至关重要的主题,特别是在设备驱动编程和系统级开发中。本文将深入探讨Linux下并发控制的原因、方法以及具体的实现机制。 并发控制的主要原因是由于多个线程可能同时访问...

    多线程并发处理数据的问题

    在IT行业中,多线程并发处理数据是一种常见的优化策略,特别是在大数据处理、网络服务和分布式系统中。通过并发,可以充分利用多核处理器的计算能力,提高程序执行效率,缩短任务的总体完成时间。本篇文章将深入探讨...

    Java_多线程与并发编程总结.doc

    在操作系统层面,多任务和多进程是通过分配不同的内存空间来实现的,而线程则共享同一进程的内存,这使得线程间通信更加便捷。Java中的多线程编程则基于这种操作系统级别的并发模型。 Java虚拟机(JVM)为每一个...

    多线程并发编程在Netty中的应用分析

    ### 多线程并发编程在Netty中的应用分析 #### JAVA内存模型与多线程编程 ##### 1.1. 硬件的发展和多任务处理 随着硬件技术的不断进步,尤其是多核处理器的普及及其成本的降低,现代操作系统几乎都具备了支持多...

    java多线程和并发.pdf

    - 在多核CPU环境下,多线程可以充分利用CPU资源,提高程序执行效率。 然而,多线程也引入了新的问题,例如: - 访问冲突和锁竞争可能导致程序执行效率降低。 - 死锁问题的发生可能会让系统进入停滞状态。 - 锁粒度...

    多线程并发服务器(毕业设计)

    在IT领域,多线程并发服务器是网络编程中的一个重要概念,尤其在高并发场景下,如网站、在线游戏和实时数据处理系统等。这个毕业设计的主题是“多线程并发服务器”,采用C++语言实现,这表明我们将在讨论中涵盖C++...

    教你找出 运行java项目,使cpu 100%,如何排查出是哪个jar包的哪个线程导致的

    如果你对`jstack`不熟悉,可以参考CSDN博主的文章,如`jstack_justry_deng的博客-CSDN博客_jstack.url`和`【线上问题排查】CPU100%和内存100%排查_码农BookSea的博客-CSDN博客.url`,这些文章提供了更多关于如何解读...

    多线程并发编程在Netty的应用分析

    《多线程并发编程在Netty中的应用分析》 ...在阅读《多线程并发编程在Netty中的应用分析》这份文档时,建议重点关注Netty的线程模型、事件驱动模型、ByteBuf内存管理以及异步编程机制,这些是理解和应用Netty的关键点。

    多线程,高并发.zip

    在IT领域,多线程和高并发是两个关键概念,特别是在Java编程中,它们对于构建高效、可扩展的系统至关重要。下面将详细解释这两个概念及其在Java中的实现和应用。 多线程是指在一个应用程序中同时运行多个独立的执行...

    Linux下基于socket多线程并发通信的实现

    总结来说,Linux下的多线程并发通信基于socket实现,结合TCP/IP协议,能够高效地处理多个客户端的并发请求。开发者需要理解套接字的概念、类型以及编程原理,同时掌握多线程编程技巧,包括线程安全、线程池等,以...

    Windows下基于socket多线程并发通信的实现

    本文介绍了在Windows 操作系统下基于TCP/IP 协议Socket 套接口的通信机制以及多线程编程知识与技巧,并给出多线程方式实现多用户与服务端(C/S)并发通信模型的详细算法,最后展现了用C++编写的多用户与服务器通信的...

Global site tag (gtag.js) - Google Analytics