Java 8 在使用内存爆了以后会发生什么?hs_err_pid 日志如何看?
问题:
Java进程被终止了,然后在应用的目录中发现了hs_err_pid日志。
运维反馈,结论是内存不够了
之前一直运行没有问题,没什么新增访问量,为什么会内存溢出,进程被killer掉类?
1.第一反应看日志:
hs_err_pid,内容如下:
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 65536 bytes for committing reserved memory.
# Possible reasons:
# The system is out of physical RAM or swap space
# The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
# JVM is running with Unscaled Compressed Oops mode in which the Java heap is
# placed in the first 4GB address space. The Java Heap base address is the
# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress
# to set the Java Heap base and to place the Java Heap above 4GB virtual address.
# This output file may be truncated or incomplete.
#
# Out of Memory Error (os_linux.cpp:2798), pid=15490, tid=0x00007f47859bc700
#
# JRE version: OpenJDK Runtime Environment (8.0_262-b10) (build 1.8.0_262-b10)
# Java VM: OpenJDK 64-Bit Server VM (25.262-b10 mixed mode linux-amd64 compressed oops)
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
# --------------- T H R E A D --------------- Current thread (0x00007f47b4196800): JavaThread "C2 CompilerThread0" daemon [_thread_in_vm, id=15500, stack(0x00007f47858bd000,0x00007f47859bd000)] Stack: [0x00007f47858bd000,0x00007f47859bd000], sp=0x00007f47859b85a0, free space=1005k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0xb5718d] VMError::report_and_die()+0x15d
V [libjvm.so+0x50675a] report_vm_out_of_memory(char const*, int, unsigned long, VMErrorType, char const*)+0xaa
V [libjvm.so+0x93d3f8] os::pd_commit_memory(char*, unsigned long, unsigned long, bool)+0xd8
V [libjvm.so+0x93457e] os::commit_memory(char*, unsigned long, unsigned long, bool)+0x2e
V [libjvm.so+0xb53d94] VirtualSpace::expand_by(unsigned long, bool)+0x1b4
V [libjvm.so+0x61d15c] CodeHeap::expand_by(unsigned long)+0x6c
V [libjvm.so+0x48e0e6] CodeCache::allocate(int, bool)+0x46
V [libjvm.so+0x4865db] BufferBlob::create(char const*, int)+0x8b
V [libjvm.so+0x48b0e1] CodeBuffer::initialize(int, int)+0x21
V [libjvm.so+0x951a62] Compile::init_buffer(unsigned int*)+0x212
V [libjvm.so+0x959201] Compile::Output()+0x351
V [libjvm.so+0x4ae738] Compile::Code_Gen()+0x4e8
V [libjvm.so+0x4b23ce] Compile::Compile(ciEnv*, C2Compiler*, ciMethod*, int, bool, bool, bool)+0x116e
V [libjvm.so+0x407e88] C2Compiler::compile_method(ciEnv*, ciMethod*, int)+0x1d8
V [libjvm.so+0x4b9cb2] CompileBroker::invoke_compiler_on_method(CompileTask*)+0x8d2
V [libjvm.so+0x4ba980] CompileBroker::compiler_thread_loop()+0x510
V [libjvm.so+0xafe902] JavaThread::thread_main_inner()+0x212
V [libjvm.so+0x93a382] java_start(Thread*)+0xf2
C [libpthread.so.0+0x7ea5] start_thread+0xc5 Current CompileTask:
C2:859196826 31212 4 org.hibernate.engine.query.spi.HQLQueryPlan::<init> (382 bytes) --------------- P R O C E S S --------------- Java Threads: ( => current thread )
用jcmd -l 查看JVM 参数如下:
输入:
sudo -u gitlab-runner jcmd 28102 help
VM.native_memory
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
VM.classloader_stats
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.finalizer_info
GC.heap_info
GC.run_finalization
GC.run
VM.uptime
VM.dynlibs
VM.flags
VM.system_properties
VM.command_line
VM.version
help
输入:
sudo -u gitlab-runner jcmd 28102 VM.command_line
VM Arguments:
jvm_args: -Xms1200m -Xmx1200m
java_command: xxx.jar --spring.profiles.active=prod
java_class_path (initial): xxxxxx.jar
Launcher Type: SUN_STANDARD
而物理机的内存为:
3.8G
现在的疑惑是内存在没什么访问的情况下,究竟为什么会内存爆掉?内存泄漏?
(未完待续)
Java 8 在使用内存爆了以后会发生什么?hs_err_pid 日志如何看?的更多相关文章
- java的GC与内存泄漏
从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- JAVA基础知识点:内存、比较和Final
1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对 ...
- java程序运行时内存分配详解 (转)
转自:http://www.tuicool.com/articles/uU77v2 一. 基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个或者多个线程,每一个Ja ...
- [转]使用Java Mission Control进行内存分配分析
jdk7u40自带了一个非常好用的工具,就是Java Mission Control.JRockit Misson Control用户应该会对mission control的很多功能十分熟悉,JRoc ...
- Java是如何管理内存的?
本文转自CSDN用户Kevin涂腾飞的文章java内存管理机制:http://blog.csdn.net/tutngfei1129287460/article/details/7383480 JAVA ...
- Java虚拟机学习 - 体系结构 内存模型
一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代” .“非堆”, 它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内存区域.默认最小值为16MB,最 ...
- 方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息
CPU使用率: InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTok ...
- Java宝典(四)------Java中也存在内存泄露。
--Java中会存在内存泄露吗? --如果你想当然的以为Java里有了垃圾回收机制就不会存在内存泄露,那你就错了. Java里也会存在内存泄露! 我们慢慢来分析. 所谓内存泄露就是指一个不再被程序使用 ...
- java中三种常见内存溢出错误的处理方法
更多 10 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的 ...
随机推荐
- C# 正则表达式常用的符号和模式解析
〇.正则表达式的基本语法符号 若只简单匹配固定字符串,则无需任何修饰符,例如:需要匹配字符串 77,则可直接写:new Regex("77"). 下边例举一下常用的符号:(知道下面 ...
- [机器学习] Yellowbrick使用笔记4-目标可视化
目标可视化工具专门用于直观地描述用于监督建模的因变量,通常称为y目标. 代码下载 当前实现了以下可视化: 平衡箱可视化Balanced Binning:生成带有垂直线的直方图,垂直线显示推荐值点,以将 ...
- Spark详解(05) - Spark核心编程SparkCore
Spark详解(05) - Spark核心编程SparkCore RDD概述 什么是RDD RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基 ...
- Vue插槽最全最通俗的总结
1.匿名插槽----就是定义的时候不带name的插槽,使用的时候也不用带name 总结: (1)一定要分清定义插槽和使用插槽格式.如上图A是在使用一个插槽的基础上再继续定义一个匿名插槽. (2)匿名插 ...
- 1.31 wlx 魔怔 9 解法交互题小结
参考题解地址 1. 从树上任意一个节点开始,跳到其随机一个后代,跳到叶子的期望次数为 \(H_{siz_u}=\ln(siz_u)\). 证明: 首先考虑一条链的情况.设在第 \(i\) 个点期望次数 ...
- LeetCode_单周赛_331
2558. 从数量最多的堆取走礼物 题意 给一组数字,每秒都选择最大的一个,留下其平方根 用 最大堆就行 code class Solution { public long pickGifts(int ...
- ColorFolder文件管理工具使用教程
ColorFolder ColorFolder Mac中文版是Mac上的一款文件夹图标修改工具,可以帮助您一键改变文件夹的颜色.帮助你更好的保持良好排序和分类,让你的文件显得更有条理,并有效提高文件管 ...
- springboot如何在拦截器中拦截post请求参数以及解决文件类型上传问题
我们经常有这样一个场景,比如:在springboot拦截器中想截取post请求的body参数做一些中间处理,或者用到自定义注解,想拦截一些特定post请求的方法的参数,记录一些请求日志. 想到了使 ...
- 视觉十四讲:第七讲_3D-3D:ICP估计姿态
1.ICP 假设有一组配对好的3D点, \(P={P_{1}, ..., P_{N}}\) , \(P^{'}={P_{1}^{'}, ..., P_{N}^{'}}\). 有一个欧式变换R,t,使得 ...
- SnowFlake 雪花算法详解与实现 & MP中的应用
BackGround 现在的服务基本是分布式,微服务形式的,而且大数据量也导致分库分表的产生,对于水平分表就需要保证表中 id 的全局唯一性. 对于 MySQL 而言,一个表中的主键 id 一般使用自 ...