iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java详解线上内存暴涨问题定位和解决方案
  • 291
分享到

Java详解线上内存暴涨问题定位和解决方案

2024-04-02 19:04:59 291人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

前因: 因为REST规范,定义资源获取接口使用GET请求,参数拼接在url上。 如果按上述定义,当参数过长,超过Tomcat默认配置 max-Http-header-size :8k

前因:

因为REST规范,定义资源获取接口使用GET请求,参数拼接在url上。

如果按上述定义,当参数过长,超过Tomcat默认配置 max-Http-header-size :8kb

会报一下错误信息:

Request header is too large

可以修改SpringBoot配置,调整请求头大小


server: 
    max-http-header-size: xxx  

后果:

如果max-http-header-size设置过大,会导致接口吞吐下降,JVM oom,内存泄漏。

因为tomcat 会用HeapByteBuffer 预分配请求头内存大小,在堆上分配。

线上内存暴涨问题定位和解决

请求和响应都是一样的配置,每次请求处理预先分配,2倍配置值内存大小在 jvm 堆中

请求过多,导致线上内存暴涨,老年代有3GB多。使用jmap dump线上内存数据,使用 JProfiler 分析。

线上内存暴涨问题定位和解决

线上内存暴涨问题定位和解决

符合配置大小和源码对象

线上内存暴涨问题定位和解决

数组有3GB,和老年代和eden区总和大小相近。


-XX:PretenureSizeThreshold jvm参数用来设置默认值,当数组或对象大小超过这个设定值,直接在 Old Gen 老年代分配;默认值0,当超过eden区的大小的时候,直接分配到old区。

使用 java -XX:+PrintCommandLineFlags -version

线上内存暴涨问题定位和解决

发现并没有使用
-XX:PretenureSizeThreshold参数,所以是

max-http-header-size设置过大,eden区分配不够,直接分配到old区,堆区内存不够,自动扩容,导致old区数据越来越多,频繁触发FullGC

JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小 于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、 -Xmx相等以避免在每次GC后调整堆的大小。

线上内存暴涨问题定位和解决

线上内存暴涨问题定位和解决

线上内存暴涨问题定位和解决

其中http-NIO-9005-exec-线程有146个,和前面配置需要分配的20M内存请求,相乘的数据与3000MB相近。

线上内存暴涨问题定位和解决

tomcat任务线程池 最大线程数200,存活时间60s

线上内存暴涨问题定位和解决

因为TaskQueue 重写了offer方法,在线程池大小小于最大线程数时,任务不会放入任务队列,只会交给现有线程执行;存活时间60s,只有当线程空闲60s才会被回收,也就是**60秒内请求要小于当前线程数,**才会有空闲线程。这就导致了线程不能及时被回收。请求数下降,但是内存还是居高不下。

解决方案:

max-http-header-size修改为默认值,接口请求方式修改为POST,请求参数放置于body

到此这篇关于Java详解线上内存暴涨问题定位和解决方案的文章就介绍到这了,更多相关Java 内存暴涨内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java详解线上内存暴涨问题定位和解决方案

本文链接: https://www.lsjlt.com/news/155879.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java详解线上内存暴涨问题定位和解决方案
    前因: 因为REST规范,定义资源获取接口使用GET请求,参数拼接在url上。 如果按上述定义,当参数过长,超过tomcat默认配置 max-http-header-size :8k...
    99+
    2024-04-02
  • 如何解决vue-cli项目开发运行时内存暴涨卡死电脑问题
    这篇文章给大家分享的是有关如何解决vue-cli项目开发运行时内存暴涨卡死电脑问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近开发一个vue项目时遇到电脑卡死问题,突然间系...
    99+
    2024-04-02
  • Java线程安全问题的解决方案
    目录线程安全问题演示解决线程安全问题1.原子类AtomicInteger2.加锁排队执行2.1 同步锁synchronized2.2 可重入锁ReentrantLock3.线程本地变...
    99+
    2024-04-02
  • Golang 并发下的问题定位及解决方案
    目录问题描述解决方案实现思路2.1 通过栈信息解析后获取2.2 修改 Go 源码获取2.3 通过 CGO 获取问题描述 在使用 gin-swagger 的过程中, 经常会发生因为缺少...
    99+
    2024-04-02
  • 常见绝对定位问题及解决方法详解
    绝对定位故障一览:你应该知道的常见问题及解决方法,需要具体代码示例 摘要:绝对定位是前端开发中经常使用的一种排版方式,但在使用过程中常常会遇到一些问题。本文将介绍几种常见的绝对定位故障,并给出相应的解决方法和具体的代码示例,帮助...
    99+
    2024-01-23
  • 详解SimpleDateFormat的线程安全问题与解决方案
    1. 原因SimpleDateFormat(下面简称sdf)类内部有一个Calendar对象引用,它用来储存和这个sdf相关的日期信息,例如sdf.parse(dateStr), sdf.format(date) 诸如此类的方法参数传入的日...
    99+
    2023-05-31
    simpledateformat 线程 dat
  • C++内存泄漏问题分析与解决方案
    C++内存泄漏问题分析与解决方案在C++的开发过程中,内存泄漏是一个常见的问题。当程序动态分配内存后却没有正确释放,在程序运行过程中会导致内存的不断累积,最终耗尽系统的可用内存。内存泄漏不仅会影响程序的性能,还可能导致程序崩溃甚至系统崩溃。...
    99+
    2023-10-22
    C++ 解决方案 内存泄漏
  • LeetCode中Java缓存问题解决方案分享
    在开发过程中,为了提高程序的性能,缓存是一个非常常见的解决方案。在LeetCode题目中,也存在一些需要用到缓存的问题。然而,如果没有考虑到缓存的实现细节,就可能会导致程序出现错误或者性能下降。本文将介绍LeetCode中Java缓存问题...
    99+
    2023-06-28
    缓存 文件 leetcode
  • vue项目内存溢出问题及解决方案
    目录vue项目内存溢出的解决vue项目内存溢出问题问题解决方法1解决方法2总结vue项目内存溢出的解决 最近在对原有项目进行迭代升级,有用代码越来越多,导致内存溢出了。 正常启动运行...
    99+
    2023-01-28
    vue项目内存溢出 vue内存溢出 内存溢出问题
  • MySQL 中定位 DDL 被阻塞的问题及解决方案
    DDL 被阻塞了,如何找到阻塞它的 SQL 经常碰到开发、测试童鞋会问,线下开发、测试环境,执行了一个DDL,发现很久都没有执行完,是不是被阻塞了?要怎么解决? 包括在群里,也经常会...
    99+
    2024-04-02
  • C++中常见的内存管理问题解决方案
    C++中常见的内存管理问题解决方案引言:内存管理是开发过程中的重要问题之一。在C++中,程序员需要负责分配和释放内存,以确保程序的稳定性和性能。然而,由于C++没有垃圾回收机制,内存管理问题常常成为程序员头疼的问题。本文将介绍C++中常见的...
    99+
    2023-10-22
    内存泄漏 垃圾回收 智能指针
  • Java中的内存泄露问题和解决办法
    目录为什么会产生内存泄漏?内存泄漏对程序的影响?如何检查和分析内存泄漏?常见的内存泄漏及解决方法1、单例造成的内存泄漏2、非静态内部类创建静态实例造成的内存泄漏【已无】3、Handl...
    99+
    2024-04-02
  • JVM:全面理解线上服务器内存溢出(OOM)问题处理方案(一)
    0. 引言 前段时间生产上遇到了OOM问题,导致服务出现了短时间的不可用,还好处理及时,否则也将酿成大祸。OOM问题也是生产中比较重要的问题,所以本期我们针对OOM问题特别讲解,结合理论与实际案例来带大家彻底攻克OOM问题处理。 1. OO...
    99+
    2023-08-19
    jvm 服务器 java
  • 日志重定向:Java和NPM中的常见问题和解决方案。
    日志重定向:Java和NPM中的常见问题和解决方案 日志记录是软件开发中非常重要的一部分,它可以帮助我们跟踪应用程序的运行状态,检测错误和性能问题。在Java和NPM中,日志记录是非常常见的。然而,在实际开发中,我们经常会遇到一些与日志记录...
    99+
    2023-06-04
    npm 日志 重定向
  • 如何解决定位并修复Go 中的内存泄露问题
    这篇文章将为大家详细讲解有关如何解决定位并修复Go 中的内存泄露问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Google Cloud Go 客户端库 [1] 通常在后台使用 gRPC 来连接 Goo...
    99+
    2023-06-25
  • C++中常见的内存管理问题的解决方案
    C++中常见的内存管理问题的解决方案引言:在C++语言中,内存管理是一个非常重要且常见的问题。由于C++没有自动内存管理机制,开发者需要负责手动分配和释放内存。然而,这往往容易引发内存泄漏、内存溢出和野指针等问题。本文将介绍一些常见的内存管...
    99+
    2023-10-22
    C++ 解决方案 内存管理
  • C++中内存泄漏问题的分析与解决方案
    C++中内存泄漏问题的分析与解决方案概述:内存泄漏是指程序在动态分配内存后,没有及时释放导致内存无法再被程序使用的情况。在C++开发中,内存泄漏是一个常见且严重的问题,一旦发生,会导致程序运行效率下降,最终可能导致程序崩溃。本文将对C++中...
    99+
    2023-10-22
    分析(Analysis) 解决方案(Solution) 内存泄漏(Memory Leak)
  • PHP中存储同步和重定向的问题解决方案是什么?
    在使用PHP进行开发的过程中,存储同步和重定向是经常遇到的问题。这两个问题都与HTTP协议密切相关。在这篇文章中,我们将介绍PHP中存储同步和重定向的问题,以及如何解决它们。 什么是存储同步? 当用户在网页上填写了表单并提交后,PHP需要...
    99+
    2023-10-06
    存储 同步 重定向
  • Windows 上的 PHP 重定向同步问题解决方案大全。
    Windows 上的 PHP 重定向同步问题解决方案大全 在开发 Web 应用程序时,我们经常会遇到需要重定向用户到另一个 URL 的情况。在 PHP 中,我们可以使用 header() 函数来实现重定向功能。但是,在某些情况下,我们可能会...
    99+
    2023-08-20
    重定向 同步 windows
  • Python开发中遇到的内存管理问题及解决方案
    Python开发中遇到的内存管理问题及解决方案摘要:在Python开发过程中,内存管理是一个重要的问题。本文将讨论一些常见的内存管理问题,并介绍相应的解决方案,包括引用计数、垃圾回收机制、内存分配、内存泄漏等。并提供了具体的代码示例来帮助读...
    99+
    2023-10-22
    内存泄漏 垃圾回收 内存优化
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作