网站建设php怎么安装,好看的论坛网站模板,免费购物网站源码,市政建设招标网站有哪些1,问题描述#xff1a;
新上了一版代码之后#xff0c;上游服务请求我们服务失败#xff0c;报错#xff1a;“服务不可用”#xff0c;发现注册中心上服务掉线#xff0c;查询日志#xff1a;发现oom#xff1a;Java heap space,GC overhead limit exceeded。 容易…1,问题描述
新上了一版代码之后上游服务请求我们服务失败报错“服务不可用”发现注册中心上服务掉线查询日志发现oomJava heap space,GC overhead limit exceeded。 容易发生内存溢出的内存空间包括PeimanentGeneration space和Heap space。
2资料收集
OutOfMemoryError: Java heap space 内存溢出的一种表示由于JVM中堆区不足导致申请内存的请求无法被满足。通常是因为程序试图分配比堆空间更大的对象或者是因为内存泄漏导致程序不断分配内存不能及时释放不再需要的内存。 OutOfMemoryError: GC overhead limit exceeded 内存溢出的一种表示执行垃圾收集的时间比例太大工作时间太少程序花费了超过98%的时间来进行垃圾回收而回收的内存少于2%如果连续多次出现这种情况就会抛出这个异常。 解决oom的途径 ①增大JVM内存。 ②检查程序代码是否有内存泄漏的地方。
3解决过程
1为了不影响上游服务首先进行服务回滚。 2检查新上的代码查看是否有内存溢出的情况。 发现调小了线程池的核心线程数和最大线程数。如果核心线程数太小可能会导致线程频繁地创建和销毁增加内存开销 降低系统性能但不会导致OOM而如果这线程池中执行的任务需要大量内存则也有可能导致OOM。为了验证这个问题 我又将这2个参数改回去了程序运行一段时间还是发现有同样的问题所以这个排除。 3由于服务启动参数设置了 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/data/logs/aku-repayment-service 所以当发生oom的时候系统会自动生成DUMP文件放在指定路径下。所以分析下这个文件就知道什么地方发生内存泄漏了 什么是DUMP文件 堆Dump是反应Java堆使用情况的内存镜像其中主要包括系统信息、虚拟机属性、完整的线程Dump、所有类和对象的 状态等。 使用 Java VisualVM对其进行分析 byte[]过多发现是字节数组输入流过多对程序进行分析发现只有日志输出和http请求会产生字节数组。日志文件没有进行修改过所以日志是没问题的所以产生oom的原因是由于那天请求量比较大的时候导致了oom问了下测试的同事发现那天在测相关的需求所以请求得比较频繁所以导致了此次的oom调大了JVM内存参数就没有再出现过了。
4总结
请求过多导致的oom调大JVM内存就能解决。