一次java进程fork大量子进程导致OOM的解决方案

发现cms项目的33959进程一直创建大量的线程

通过MAT分析存在大量的Curator-PathChildrenCache-9211线程

通过jstack命令打印线程栈信息如下:

至此问题基本有眉目了,可以判断是zk的监听线程在后台定时任务失败的时候,会无限创建cms进程的子线程

时间: 2024-07-30 00:46:38

一次java进程fork大量子进程导致OOM的解决方案的相关文章

Java进程CPU占用高导致的网页请求超时的故障排查

一.发现问题的系统检查: 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load average超过4负载很大,PID为7163的进程占用到了800%多. 二.定位故障 根据这种故障的一般处理思路,先找出问题进程内CPU占用率高的线程,再通过线程栈信息找出该线程当时在运行的问题代码段,操作如下: 2.1.根据思路查看高占用的"进程中"占用高的"线程",追踪发现7163的进程中16298的线程占用较高,使用命令: top -Hbp 7163 | a

linux内存不足导致java进程被kill掉

记得之前在国内现金贷贷超放量时,后台java进程莫名奇妙就没了, 查看 /var/log/message 出现如下日志,标明,Linux 系统自身把 Java 进程杀掉了 Jun 28 02:58:27 hilife-dev001 kernel: Out of memory: Kill process 14561 (java) score 52 or sacrifice child 当 Linux 系统内存不足时,系统会把当前系统占用系统内存过高的进程当做流氓进程,然后系统发出信号将这个流氓进程

linux创建进程fork的方法步骤

fork创建进程 函数原型如下 #include// 必须引入头文件,使用fork函数的时候,必须包含这个头文件,否则,系统找不到fork函数 pid_t fork(void); //void代表没有任何形式参数 父进程与子进程 1.掌握概念,什么是父进程,什么是子进程 除了0号进程(系统创建的)之外,linux系统中都是由其他进程创建的.创建新进程的进程,即调用fork函数的进程为父进程,新建的进程为子进程. 2.fork函数不需要任何参数,对于返回值有三种情况 1)对于父进程,fork函数返

fork产生子进程利用pipe管道通信

http://siqun.blog.163.com/blog/static/213496001201341231121720/ 转载链接:http://hi.baidu.com/hj11yc/item/9a2ea30cca773077bfe97efc注:加了一点内容 进程间通信 fork pipe pie_t 等用法(管道机制 通信) 每个进程各自有不同的用户地址空间,任 何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户

【C/C++】多进程:父进程监听子进程状态 wait()的使用

文章结构: wait能力介绍 wait()函数讲解 示例代码及操作演示 wait能力介绍 在上一篇[C/C++]多进程:子进程的创建fork()中演示了子进程的创建. 创建子进程后,父进程具有监听子进程的运行状态的能力,用到的函数为: #include <sys/wait.h> pid_t wait(int *status); pid_t waitpid(pid_t pid, int *status, int options); 以上函数用于等待子进程子进程的状态变化回调并且获取状态变化信息.

死磕内存篇2 --JAVA进程是怎么突然挂掉的

JVM内存不足导致进程死掉. Native memory allocation (mmap) failed to map 一台服务器上部署很多JAVA进程已经是微服务的常态,但也有些坑. 背景,测试服务器上的一些JAVA进程突然挂掉,查看call back的日志发现如下: # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) fa

进程控制(八)---子进程终止状态相关的宏

前面笔记中提到了无论子进程是 正常终止 还是 异常终止,父进程都可以通过 wait 函数或者waitpid 函数来获取到其 终止状态.但是 正常终止 和 异常终止 父进程所获得的信息是不同的,正常终止时父进程收到的是 子进程 中exit的参数,而异常终止 时父进程收到的是 导致子进程异常终止的 信号 编号值. 正常终止返回给父进程的状态值 和 异常终止时传递给父进程的信号值 是存放在 wait 或者 waitpid 函数的参数 status 所指向内存的不同位上的.要是父进程想知道 子进程是正常

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

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

java进程卡死问题

原文地址:http://stackoverflow.com/questions/28739600/jvm-hang-and-kill-3-jmap-failed tomcat进程出现了如下异常,并且卡在这个状态几天时间了: 所有线程都停止, 有一些连接停留在 SYNC_RECV 状态 kill -3 没有输出线程栈 jmap 和 jstack 无法正常工作 sudo -u tomcat /usr/java/jdk1.6.0_45/bin/jmap -heap 19938 Attaching to