网站首页 > 技术文章 正文
问题:centos 服务器启动java服务,没有看到info日志输出,查看控制台日志
error='Cannot allocate memory'
一、初步判断是JVM内存不足导致不能启动
二、根据日志提示查看具体日志信息
vi /home/parklot/ipcp-svc-parklot/hs_err_pid16196.log
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 357564416 bytes for committing reserved memory.
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Use 64 bit Java on a 64 bit OS
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
# Out of Memory Error (os_linux.cpp:2640), pid=16196, tid=0x00007ff04f0a9700
#
# JRE version: (8.0_181-b13) (build )
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.181-b13 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
#
Memory: 4k page, physical 7878740k(120500k free), swap 8126460k(0k free)
vm_info: Java HotSpot(TM) 64-Bit Server VM (25.181-b13) for linux-amd64 JRE (1.8.0_181-b13), built on Jul 7 2018 00:56:38 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8)
time: Tue Apr 13 13:31:27 2021
elapsed time: 0 seconds (0d 0h 0m 0s)
根据hs_err_pid16196.log文件提供的信息知道应用可用的交换区内存已经是0KB;
三、使用top命令查看服务器内存使用情况
四、进一步结论
到现在很明显我们可以得出是应用启动不了由于服务器的内存不足造成。
五、内存不足的原因推测
推测:内存不够用分两种情况
推测 1:
JAVA程序使用的内存申请超出了JVM分配的, 此类只会抛出
java.lang.OutOfMemoryError: Java heap space,JAVA进程是不会有影响,下次也可以继续接受请求提供服务。
推测 2:
JVM尝试去向操作系统申请一块内存超出系统的可使用(RSS)内存时, 此时linux会结束JAVA进程,并抛出如上错误。
这种场景也常见: 如在一台16G内存的服务器上跑着两个服务,两个服务同时启动各自分配10G内存,因为JVM的垃圾回收机制一般情况下是不会有问题,能正常服务,当两个服务同时需要用到的内存超出16G时,将会被linux干掉一个服务.
(注: JVM启动时,通过-Xmx等参数分配的内存只会影响到VIRT)
根据上面的推测和日志信息,服务器出现内存不足的原因是符合第二种推测2.具体验证这个推测的测试实验过程,请看另外的一篇文章。
猜你喜欢
- 2024-10-12 SpringBoot执行jar报错java.lang.OutOfMemoryError_指定内存大小
- 2024-10-12 几种内存溢出(内存溢出类型)
- 2024-10-12 JVM优化:实战OutOfMemoryError异常
- 2024-10-12 JVM 在遇到OOM(OutOfMemoryError)时生成Dump文件的三种方式
- 2024-10-12 线上故障排查全套路,总有一款适合你
- 2024-10-12 面试被问到“零拷贝”!你真的理解吗?
- 2024-10-12 面试夺命三问之《内存溢出和逃逸分析》
- 2024-10-12 阿里面试官:Exception和Error有什么区别?
- 2024-10-12 Eclipse运行大量文件异常OutOfMemoryError: GC overhead limit
- 2024-10-12 记一次线上内存异常排查实战(线上内存泄漏如何定位)
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)