【复盘】记录一次JVM 异常问题 java.lang.OutOfMemoryError: unable to create new native thread

背景是最新运营提了一个需求,需要根据用户信息拉去三分机构的信贷数据,需要达到一天百万级别,但是经过实际测试,也只能达到40W量级,具体就是通过起多个Spring Boot项目,每个项目1S拉一个用户,基本上一个项目可以拉8W多,5个项目就足够。但是跑了一天发现出现内存使用率过高的问题,并且登录不了机器,所以只能找运维重启。

具体分析原因如下,可以看到主要是程序的内存使用达到上线。

	java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: unable to create new native threadat java.util.concurrent.FutureTask.report(FutureTask.java:122)at java.util.concurrent.FutureTask.get(FutureTask.java:192)at finance.CRM.FrameWork.ProcessControl.run(ProcessControl.java:141)at finance.CRM.Service.Action.UserDataUpdateAction.upload(UserDataUpdateAction.java:56)at sun.reflect.GeneratedMethodAccessor40.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at 

在分析发现其实内存是一个整体上升的趋势,所以第一步就是先分析代码问题,因为JVM会自动GC处理,不可能这么段时间内,内存上升这么快。CPU整体是毕竟平稳的在25%左右。
在这里插入图片描述
经过发现其实有一些空闲对象直接new 并且没有使用,这种情况下 这些对象其实不能被销毁。并且还有一些线程池处理的逻辑,分析之后,发现其实不需要,就删除了。

查看创建了多少线程
jstack -l 22681 | grep ‘java.lang.Thread.State’ | wc -l

查看限制数 ulimit -u

查看当前进程运行线程数
pstree -p pid | wc -l
jstack -F PID 堆栈

通过分析,进程是正常的基本维持在几十个线程之间,并且使用Arthas 也分析了线程和JVM的GC 发现是正常的,所以没有问题了。

链接:
https://arthas.aliyun.com/doc/quick-start.html
https://www.cnblogs.com/zjfjava/p/17016083.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/162804.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Webpack 5 基础配置》- 禁止在出现编译错误或警告时,覆盖浏览器全屏显示

Webpack5 overlay 配置地址默认编译错误或警告为 true,即浏览器全屏显示;overlay 属性可以是 boolean 型,也可是 object 类型;还有其它设置说明,详见上述官网地址; module.exports {devServer: {client: {…

【使用Python编写游戏辅助工具】第二篇:键盘监听的应用

前言 这里是【使用Python编写游戏辅助工具】的第二篇:键盘监听的应用。本文主要介绍使用Python实现事件监听功能。 键盘监听是指通过编程的方式监控用户在键盘上的按键操作。 在这里键盘监听的主要用途是: 监听我们按下的按键,如果按下了指…

找出字符串中第一个匹配项的下标

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入:haystack “s…

【MongoDB】索引 - 复合索引

一、准备工作 这里准备一些学生数据 db.students.insertMany([{ _id: 1, name: "张三", age: 20, class: { id: 1, name: "1班" }},{ _id: 2, name: "李四", age: 22, class: { id: 2, name: "2班" }},{ _id: 3, name: "王五…

docker存储卷

docker存储卷 COW机制 Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。 如果运行中的容器修改了现有的一个已经存在的 文件,那么该文件将会从读写层下面的只读层复制到读写层&#xff0…

Node Sass version 9.0.0 is incompatible with ^4.0.0.

1.错误产生原因: node、 node-sass 和sass-loader的版本对应问题 2.解决方案: 删除之前的 npm uninstall node-sass sass-loader 安装指定的 npm i node-sass4.14.1 sass-loader7.3.1 --save -dev

【微服务】一体化智慧工地管理平台源码

智慧工地系统是一种利用人工智能和物联网技术来监测和管理建筑工地的系统。它可以通过感知设备、数据处理和分析、智能控制等技术手段,实现对工地施工、设备状态、人员安全等方面的实时监控和管理。 一、智慧工地让工程施工智能化 1、内容全面,多维度数…

STM8单片机在医疗设备中的应用和优势

STM8单片机作为一种高性能、低功耗的微控制器,在医疗设备领域得到了广泛的应用。本文对STM8单片机在医疗设备中的应用进行了研究,探讨了它在医疗设备中的优势和特点,并分析了其在提升医疗设备性能、精确控制和数据处理等方面的应用效果。 一…

基于ruoyi框架项目-部署到服务器上

基于ruoyi框架项目-部署到服务器上 文章目录 基于ruoyi框架项目-部署到服务器上1.前端vue编译,后的dist下内容打包(前后端分离版本需要)2.后端打包成jar包(如果是thymeleaf仅需打包jar)3.上传到服务器目录下4. docker部…

webgoat-Insecure Deserialization不安全的序列化

A(8)不安全的反序列化 反序列化是将已序列化的数据还原回对象的过程。然而,如果反序列化是不安全的,那么恶意攻击者可以在序列化的数据中夹带恶意代码,从而在反序列化时执行这些代码。这种攻击被称为反序列化。 什么…

【C++】万字详解IO流(输入输出流+文件流+字符串流)

文章目录 一、标准输入输出流1.1提取符>>&#xff08;赋值给&#xff09;与插入符<<&#xff08;输出到&#xff09;理解cin >> a理解ifstream&#xff08;读&#xff09; >> a例子 1.2get系列函数get与getline函数细小但又重要的区别 1.3获取状态信息…

Vue3 简单实现虚拟Table,展示海量单词.利用WebAPI speechSynthesis,朗读英语单词

目录 本页面完整代码 视频演示 完整的页面代码 利用webapi speechSynthesis帮助我们自动郎读英语单词&#xff0c;可以利用这个API&#xff0c;做一些小说朗读或到账提示。 本页面完整代码 用Vue写了一个简单页面&#xff0c;里面还写了一个简单的虚拟Table支持海量数据展示…