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

news2024/11/26 21:28:33

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

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

	java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: unable to create new native thread
        at 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.coloradmin.cn/o/1170535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker网络模式_Docker常用命令_以及Docker如何给运行的镜像内容连接互联网_Docker网络模式原理---Docker工作笔记004

然后我们来看一下docker的网络模式: 这个docker我们先看一下电脑上的网络,有两个,1个是lo是测试用的一个是enp0s3这个是我们以太网地址,然后我们去: 安装docker 安装后我们再去ip address可以看到多出来一个网络是docker0 这里ip地址是172.17.0.1这个是私有地址外部无法访问 这…

软件测试必备技能—接口测试

接口测试,其实并没有那么可怕,但是作为测试人员也是必不可少的技能。 接口分为:内部接口和外部接口。 内部接口:是浏览器与服务器的接口。这个很容易理解,web开发一般分前端和后端,前端开发人员用html/cs…

基于Python+Pygame实现一个滑雪小游戏

目录 项目介绍Pygame介绍项目文件夹介绍演示视频代码免费领取 一、项目介绍 使用介绍:运行main.py文件后,通过左右按键可以控制小人的移动,如果经过旗杆那么10分,如果碰到树木那么减50分。 二、Pygame介绍 Pygame是一个用于游…

MS5910PA为行业内领先的可配置10bit到16bit分辨率的旋变数字转换器,可替代AD2S1210

MS5910PA 是一款可配置 10bit 到 16bit 分辨率的旋 变数字转换器。片上集成正弦波激励电路,正弦和余弦 允许输入峰峰值幅度为 2.3V 到 4.0V ,频率范围为 2kHz 至 20kHz 。 转换器可并行或串行输出角度和速度对应的 数字量。 MS5910PA 采…

【解锁未来】探索Web3的无限可能-02

文章目录 什么是Web3 ?Web3对公司的意义? 什么是Web3 ? 简单地说,Web3 是加密货币的延伸,它以新的方式使用区块链来达到新的目的。区块链可以存储钱包中代币的数量、自我执行合同的条款或去中心化应用程序(…

【Python】collections.deque

Python的collections模块是容器数据类型,其中的deque对象是队列容器。返回双向队列对象,类似列表。 from collections import deque[x for x in dir(deque) if not x.startswith(_)] # 结果: [append, appendleft, clear, copy, count, exte…

【Spring MVC】Spring MVC框架的介绍及其使用方法

目录 一、MVC模式 1.1 MVC模式的发展 1.1.1 Model1 模型 1.1.2 Model2 模型 1.2 MVC模式简介 1.模型(Model) 2.视图(View) 3.控制器(Controller) 二、Spring MVC模型简介 三、Spring MVC 六大核心组件 3.1 六大组件简介 1.前端控制器 DispatcherServlet&#xff08…

机器学习(深度学习)轴承故障诊断分类(提供故障数据和python代码实现)

机器学习(深度学习)故障诊断分类(提供故障数据和python代码实现) 轴承故障数据集和python代码自取:https://mbd.pub/o/bread/ZZWTm5hw 摘要:机器学习广泛的应用于机械故障诊断和故障分类问题,本…

全志H6-LicheePi调试记录

LPDDR3:K4E6E304ED-EGCG和K4E6E304ED-EGCF 最高速率不一样,CG是2133MHz,CF是1866MHz

【leetcode】27. 原地移除元素(图解)

目录 1. 思路(图解)2. 代码 题目链接:leetcode 27. 移除元素 题目描述: 需要注意的是,返回的是新数组长度,但是输出的是数组元素。 1. 思路(图解) 思路一:空间换时间…

基于SSM的流浪动物领养系统网站设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

自动化测试框架知识详解

自动化测试因其节约成本、提高效率、减少手动干预等优势已经日渐成为测试人员的“潮流”,从业人员日益清楚地明白实现自动化框架是软件自动化项目成功的关键因素之一。本篇文章将从什么是真正的自动化测试框架、自动化脚本如何工作以及自动化测试框架会如何在测试过…

手机转接器实现原理,低成本方案讲解

USB-C PD协议里,SRC和SNK双方之间通过CC通信来协商请求确定充电功率及数据传输速率。当个设备需要充电时,它会发送消息去给适配器请求充电,此时充电器会回应设备的请求,并告知其可提供的档位功率,设备端会根据适配器端…

newstarctf2022week2

Word-For-You(2 Gen) 和week1 的界面一样不过当时我写题的时候出了个小插曲 连接 MySQL 失败: Access denied for user rootlocalhost 这句话印在了背景,后来再进就没了,我猜测是报错注入 想办法传参 可以看到一个name2,试着传参 发现有回显三个字段…

深入理解WPF中的依赖注入和控制反转

在WPF开发中,依赖注入(Dependency Injection)和控制反转(Inversion of Control)是程序解耦的关键,在当今软件工程中占有举足轻重的地位,两者之间有着密不可分的联系。今天就以一个简单的小例子&…

692. 前k个高频单词(map)

目录 一、题目 二、代码 一、题目 692. 前K个高频单词 - 力扣&#xff08;LeetCode&#xff09; 二、代码 class Solution {class KV_sort{public:bool operator()(const pair<string,int> kv1, const pair<string,int> kv2){if(kv1.first kv2.first )//两个对…

MyBatis 操作数据库

一、什么是 MyBatis&#xff1f; MyBatis 是是一个ORM 框架&#xff0c;ORM&#xff08;Object Relational Mapping&#xff09;&#xff0c;即对象关系映射。底层实现是基于 JDBC 的&#xff0c;但是 MyBatis 隐藏了 JDBC 的复杂性&#xff0c;提供了简单易用的 API&#xff…

MedianFlow 跟踪算法详解

在技术日新月异的时代&#xff0c;今天的技术可能在明天就会被新的技术取代&#xff0c;例如现在爆火的大模型。但目前看来&#xff0c;大模型还不能做到无所不能。 所以这篇博客还是来考古一下&#xff0c;写一下传统的跟踪算法。这里不是为了怼大模型而为了写一篇传统算法而…

【1++的Linux】之线程(一)

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的Linux】 文章目录 一&#xff0c;Linux线程概念二&#xff0c;线程的优缺点进程和线程类比现实 三&#xff0c; 线程的操作线程的私有资源 && 线程的创建线程的等待线程终止线程分离…

初学Flutter:swiper实现

效果展示&#xff1a; flutter swiper 1、安装 card_swiper 2、引入card_swiper import package:card_swiper/card_swiper.dart;3、使用 这里我主要是对官网例子进行实践&#xff0c;主要是5种常用的swiper 1、普遍的swiper //custom swiper class CustomSwiper extends S…