`

jvm内存溢出实例-Netty参数抽取

 
阅读更多
内存溢出, 高级程序员的必修课
而且往往是伴随着大压力并发一起来

下面是一个实例

线程实例在另一个贴子里有讲, 这个实例线程上没问题, 就没有截图了

把JVM设置在最大内存64M, 好快速产生瓶颈


运行程序, 打开jconsole监控


查看内存


打开jmeter, 100个线程, 循环100次, 由于前面调低了内存, 所以不需要跑太猛, 而且我的是notebook, 4G内存, win7, mysql, netbean等一堆后台, 资源有限












100个线程, 循环100次跑下来, 内存爆了
JVM尝试了很多次GC, 但没办法
程序陷入GC死循环, 进入假死状态, 再过一会就直接out of memory
注意看曲线直接上升的势头, 多美妙

-----一轮蛋疼的调试, 过程略过-----

下面是弄好后的结果


再次打开jconsole


清空jmeter


100个线程, 循环100次跑完


内存才用了25m, 有升有降的曲线说明内存很健康


执行下GC, OLD GEN 果断下降, 至此, 内存溢出问题解决

-----下面是代码分析-----


这是原代码, 作用是抽取netty的post请求参数


这是分析解决后的代码, 这种事情, 往往1,2天的调试下来, 就是1,2句代码的事
当然这也从另一方面证明了该程序员的代码质量是很好的


这是"坑货" HttpDataFactory,
为什么不把HttpDataFactory放在函数里呢
这是出于性能考虑, 为了减少初始化的次数, 把它放外面, 符合资深程序员的思维
只是一方面对API不熟悉, 另一方面忽略了长期持有的情况
  • 大小: 36.9 KB
  • 大小: 40.4 KB
  • 大小: 65.3 KB
  • 大小: 83.4 KB
  • 大小: 61.2 KB
  • 大小: 74.5 KB
  • 大小: 94.2 KB
  • 大小: 58.6 KB
  • 大小: 75.2 KB
  • 大小: 86.9 KB
  • 大小: 68.8 KB
  • 大小: 45.4 KB
  • 大小: 56.2 KB
  • 大小: 75 KB
  • 大小: 7.4 KB
  • 大小: 93.7 KB
分享到:
评论

相关推荐

    JVM内存溢出问题解析

    二是物理解决,增大物理内存,然后通过调整 JVM 的参数来调整内存的大小。 JVM 内存溢出类型有两种:java.lang.OutOfMemoryError: PermGen space 和 java.lang.OutOfMemoryError: Java heap space。PermGen space ...

    jvm内存溢出

    ### JVM内存溢出详解 #### 一、基本概念与理解 **JVM内存溢出**是一种常见的运行时错误,指的是程序在执行过程中因为无法获得足够的内存资源而导致的问题。这种问题通常发生在程序尝试分配超出系统可用内存限制的...

    JVM内存参数详解以及配置调优

    JVM 内存参数详解以及配置调优 JVM 内存参数是 Java 虚拟机中最重要的参数之一,它直接影响着 Java 应用程序的性能和稳定性。在这个资源中,我们将详细讨论 JVM 内存参数的配置和调优,包括 JVM 的结构、内存管理、...

    eclipse内存溢出报错-解决办法

    3. **调整内存参数**:例如,将初始堆内存设置为128M,最大堆内存设置为512M,永久代初始大小设为64M,最大大小设为128M,可以在eclipse.ini中这样修改: ``` -vmargs -Xms128m -Xmx512m -XX:PermSize=64M -...

    jvm性能调优-jvm内存模型和优化-performance-jvm-memorymodel-optimize.zip

    《JVM性能调优:深入理解JVM内存模型与优化》 在Java开发中,JVM(Java Virtual Machine)性能调优是提升应用程序效率的关键环节。JVM内存模型的理解和优化,对于解决性能瓶颈、避免内存泄漏以及提高系统稳定性至关...

    JVM-内存管理 2012-12.pdf

    Java堆是JVM内存管理中最大的一块区域,它负责存储对象实例及数组值。在虚拟机启动时创建,并且被所有线程共享。堆是垃圾收集器管理的主要区域,其大小可以通过-Xms和-Xmx参数进行控制。在JDK 1.2版本之后,Java堆被...

    nginx-upstream-jvm-route-1.15

    【标题】"nginx-upstream-jvm-route-1.15" 涉及的核心知识点是Nginx的upstream模块与JVM路由的整合,特别针对Nginx 1.15版本。这个项目旨在解决在配置Nginx时遇到的特定错误提示“nginx: [emerg] invalid parameter ...

    JVM原理及内存溢出经典案列分析.ppt

    简单的判断JVM内存溢出的方法

    JVM调优总结 Xms -Xmx -Xmn -Xss

    除了基本的内存参数外,还可以通过其他参数进一步优化JVM的表现: #### 5. -XX:NewRatio - **定义**:设置年轻代和老年代之间的比例。 - **示例**:`-XX:NewRatio=4` 表示年轻代与老年代的比例为1:4,即年轻代占总...

    java jvm 参数 -Xms -Xmx -Xmn -Xss -

    这些参数是用来调整JVM堆内存和线程栈大小的。 1. `-Xms`: 这个参数用于设置JVM启动时初始的堆内存大小。默认情况下,JVM会从小到大动态地调整堆空间,但设置`-Xms`可以确保程序启动时就分配足够的内存,避免频繁的...

    JVM内存溢出

    【JVM内存溢出】指的是Java...总的来说,解决JVM内存溢出问题需要深入了解Java内存模型,合理配置JVM参数,并结合性能监控工具进行诊断和优化。这不仅可以避免服务器因内存问题崩溃,还能提升整体系统的稳定性和性能。

    JVM调优总结 -Xms -Xmx -Xmn -Xss

    JVM 调优是 Java virtual machine 的性能优化,通过调整 JVM 的参数来提高 Java 应用程序的性能。其中,-Xms、-Xmx、-Xmn、-Xss 是四个重要的参数,分别控制 JVM 的初始堆大小、最大堆大小、年轻代大小和每个线程的...

    JVM内存配置优化

    可以通过调整JVM参数`-Xms`和`-Xmx`来增加堆内存的初始值和最大值。例如,设置`-Xms2048m -Xmx2048m`可以将堆内存的最小和最大值都设置为2GB。 - **JVM默认堆内存配置**:JVM默认情况下,最小堆内存为物理内存的1...

    内存溢出配置,内存溢出配置

    给定的部分内容中提到了一些JVM的启动参数,这些参数直接关联到内存溢出配置,下面我们来逐一解析: - **-Xms1024m**:设置JVM初始分配的堆内存大小为1024MB。这意味着JVM启动时,会立即申请1024MB的物理内存。 - *...

    tomcat6.0 修改启动内存设置 java jvm参数配置

    在调整 Tomcat 的内存设置之前,我们需要了解一些基本的 JVM 内存参数: 1. **`-Xms`**:设置 JVM 启动时的初始堆内存大小。 2. **`-Xmx`**:设置 JVM 运行时的最大堆内存大小。 3. **`-Xmn`**:设置年轻代 (Young ...

    【全平台】+【JVM内存监控】-1626761424924.json

    说明:grafana监控jvm内存模板,本人根据官方模板修改而来,做了一些优化。

    生产环境jvm调优的实例代码-jvm.zip

    6. **JVM性能日志与分析**:通过`-XX:+PrintFlagsFinal`查看默认JVM配置,`-XX:+PrintGC`和`-XX:+PrintGCDetails`记录GC日志,`-XX:+HeapDumpOnOutOfMemoryError`在内存溢出时生成堆转储文件,便于后期分析。...

    关于JVM内存溢出的原因分析及解决方案探讨.docx

    本文主要讨论了 JVM 中的内存溢出问题,包括内存溢出的定义、内存泄漏和内存溢出的区别与联系、JVM 垃圾回收机制、内存溢出的原因分析、常见的四种内存溢出情况以及解决方案。 一、内存溢出的定义 内存溢出是指...

    关于tomcat乱码以及tomcat jvm 内存溢出问题的解决方案和理论

    解决内存溢出通常需要调整JVM的内存参数: 1. **堆内存**:通过`-Xms`和`-Xmx`设置初始堆大小和最大堆大小。例如,`-Xms256m -Xmx1024m`表示初始分配256MB,最大不超过1GB。 2. **新生代和老年代**:`-XX:NewRatio`...

    JVM性学习笔记-基本原理,内存模型,JVM参数

    JVM性学习笔记-基本原理,内存模型,JVM参数设置,类加载器原理,JDK自带工具

Global site tag (gtag.js) - Google Analytics