运行一段时间报Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit

5 篇文章 0 订阅

部署微服务,20个服务部署到一台腾讯云服务器上. 多个项目运行一段时间均报错:

2019-11-23 16:04:19.418  INFO 19851 --- [nio-8780-exec-4] c.c.common.aspect.ControllerLogAspect    : http_method : POST
2019-11-23 16:04:19.418  INFO 19851 --- [nio-8780-exec-4] c.c.common.aspect.ControllerLogAspect    : ip : 10.10.64.34
2019-11-23 16:04:19.418  INFO 19851 --- [nio-8780-exec-4] c.c.common.aspect.ControllerLogAspect    : class_method : com.coship.event.controller.WorkEventController.getEventLogLatest
2019-11-23 16:04:19.418  INFO 19851 --- [nio-8780-exec-4] c.c.common.aspect.ControllerLogAspect    : args : [EventParam(id=null, eventCode=null, eventName=null, eventContent=null, eventLevel=null, eventStatus=null, queryStatus=null, eventType=null, isDeviceEvent=null, spCode=null, orgCode=null, sendStatus=null, createTime=null, endTime=null, assignPerson=null, isManager=0, stepId=null, remarks=null, orgCodeList=null, resourceCode=null, ruleCode=null, copyPerson=null, reviewStatus=null, imageFile=null, imageSrc=null, posterCode=null, statusAction=null, aduitPerson=null, deviceName=null, deviceCode=null, deviceAddress=null, auditResult=null, result=null, projectType=null, addrCode=null, path=null, productCode=null, productName=null, reactLogId=null, reactLogPrefix=null, isEmergency=null, isDealed=null, deviceCodeList=null), org.apache.catalina.connector.RequestFacade@2854db61]
2019-11-23 16:04:19.434 DEBUG 19851 --- [io-8780-exec-10] c.c.ws.dao.EventDao.getWoStatisByMonth   : ==>  Preparing: SELECT DATE_FORMAT(CREATE_TIME, '%Y-%m') statisName, COUNT(*) AS value FROM t_event WHERE t_event.sp_code = ? AND t_event.CREATE_TIME >= ? AND t_event.CREATE_TIME <= ? GROUP BY DATE_FORMAT(CREATE_TIME, '%Y-%m') 
2019-11-23 16:04:19.434 DEBUG 19851 --- [io-8780-exec-10] c.c.ws.dao.EventDao.getWoStatisByMonth   : ==> Parameters: SP_coship(String), 2018-12-01 00:00:00(String), 2019-11-01(String)
2019-11-23 16:04:19.435 DEBUG 19851 --- [io-8780-exec-10] c.c.ws.dao.EventDao.getWoStatisByMonth   : <==      Total: 0
2019-11-23 16:04:19.435  INFO 19851 --- [io-8780-exec-10] c.c.common.aspect.ControllerLogAspect    : response : {"data":{"2018-12":"0","2019-01":"0","2019-02":"0","2019-03":"0","2019-04":"0","2019-05":"0","2019-06":"0","2019-07":"0","2019-08":"0","2019-09":"0","2019-10":"0","2019-11":"0"},"returnCode":"200","returnMsg":"success","success":true,"token":""}
2019-11-23 16:04:19.435  INFO 19851 --- [io-8780-exec-10] c.c.common.aspect.ControllerLogAspect    : cast time : 48ms
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007ff7b5a6ae15, pid=19851, tid=140701260982016
#
# JRE version: Java(TM) SE Runtime Environment (8.0_31-b13) (build 1.8.0_31-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.31-b07 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# V  [libjvm.so+0x858e15]  LoadKlassNode::make(PhaseGVN&, Node*, Node*, TypePtr const*, TypeKlassPtr const*)+0x45
#
# Failed to write 


. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /usr/local/conet/conet-parent/workorder-server/hs_err_pid19851.log
2019-11-23 16:04:19.471  INFO 19851 --- [nio-8780-exec-4] c.c.e.controller.WorkEventController     : EventController getEventLogLatest() , eventReq= EventParam(id=null, eventCode=null, eventName=null, eventContent=null, eventLevel=null, eventStatus=null, queryStatus=null, eventType=null, isDeviceEvent=null, spCode=null, orgCode=null, sendStatus=null, createTime=null, endTime=null, assignPerson=null, isManager=0, stepId=null, remarks=null, orgCodeList=null, resourceCode=null, ruleCode=null, copyPerson=null, reviewStatus=null, imageFile=null, imageSrc=null, posterCode=null, statusAction=null, aduitPerson=null, deviceName=null, deviceCode=null, deviceAddress=null, auditResult=null, result=null, projectType=null, addrCode=null, path=null, productCode=null, productName=null, reactLogId=null, reactLogPrefix=null, isEmergency=null, isDealed=null, deviceCodeList=null)
2019-11-23 16:04:19.477  INFO 19851 --- [nio-8780-exec-2] c.c.common.aspect.ControllerLogAspect    : url : http://10.10.64.34:8780/api/v1/getWoStatisByMonth
2019-11-23 16:04:19.477  INFO 19851 --- [nio-8780-exec-2] c.c.common.aspect.ControllerLogAspect    : http_method : POST
2019-11-23 16:04:19.477  INFO 19851 --- [nio-8780-exec-2] c.c.common.aspect.ControllerLogAspect    : ip : 10.10.64.34
2019-11-23 16:04:19.477  INFO 19851 --- [nio-8780-exec-2] c.c.common.aspect.ControllerLogAspect    : class_method : com.coship.event.controller.WorkEventController.getWoStatisByMonth
2019-11-23 16:04:19.477  INFO 19851 --- [nio-8780-exec-2] c.c.common.aspect.ControllerLogAspect    : args : [WoStatisByMonthParam(beginDate=2019-11, endDate=null, spCode=null), org.apache.catalina.connector.RequestFacade@ecc3ebc]
#
# Compiler replay data is saved as:
# /usr/local/conet/conet-parent/workorder-server/replay_pid19851.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#

打出堆栈快照和线程快照均未发现问题.后修改配置完成

ulimit -a 用来显示当前的各种用户进程限制
Linux对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况,
设置个Linux用户的最大进程数,一些需要设置为无限制:
数据段长度:ulimit -d unlimited
最大内存大小:ulimit -m unlimited
堆栈大小:ulimit -s unlimited

我们在用这个命令的时候主要是为了产生core文件,就是程序运行发行段错误时的文件:

ulimit -c unlimited   

生成core文件,

#######################################################
以下来自;http://hi.baidu.com/jrckkyy/blog/item/2562320a5bdbc534b1351d95.html

查看限制情况 ulimit -a

可以看到如下信息

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
pending signals                 (-i) 1024
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

而我们需要修改的是open files (-n) 1024的值

于是命令就是limit -n 2048(随各自需要设置)

-----------------------------------------------------------------------------------

 

功能说明:控制shell程序的资源。

语  法:ulimit [-aHS][-c <core文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小>][-t <CPU时间>][-u <程序数目>][-v <虚拟内存大小>]

参考:https://www.cnblogs.com/qq78292959/archive/2012/05/08/2490443.html

网上提供的解决办法,尝试如下

[root@elastic1 logs]# ulimit -c unlimited
[root@elastic1 logs]# ulimit -c -l
core file size          (blocks, -c) unlimited
max locked memory       (kbytes, -l) 64
[root@elastic1 logs]# 

这里备注一下:该方法并未解决问题,希望这里不要对其他网友产生误解。

下面一篇博文提供了解决思路 https://www.cnblogs.com/songyuejie/p/11221381.html

默认情况下Linux服务起的core core file size设置为0,需要调整该参数,但是这个参数并不能 解决问题; 问题的根本原因在于服务器的运行应用程序的打开文件的最大数及最大进程数设置的相对较小默认为4096 需要修改如下配置: /etc/security/limits.conf

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误消息表示无法写入内存转储文件。内存转储已被禁用。要启用内存转储,请在再次启动 Java 之前尝试使用 "ulimit -c unlimited"。 内存转储是一种系统工具,用于在程序崩溃时记录程序的当前状态。这样,开发人员就可以分析内存转储文件,以找出导致程序崩溃的原因。 如果内存转储已被禁用,则无法生成内存转储文件。要启用内存转储,可以使用 "ulimit -c unlimited" 命令。这是一个 Unix/Linux 命令,用于设置系统参数。使用这个命令后,就可以再次启动 Java 程序,并生成内存转储文件。 ### 回答2: 这个错误信息意味着无法生成核心转储文件。核心转储文件是在应用程序崩溃时生成的一种包含应用程序内存状态的文件,用于分析和调试。为了启用核心转储,可以在重新启动Java之前尝试运行命令"ulimit -c unlimited"。 "ulimit"是一个用于限制和监控用户对系统资源的使用的命令。在这种情况下,我们使用"ulimit -c unlimited"命令来取消对核心转储文件大小的限制,使得在Java应用程序崩溃时可以生成完整的核心转储文件。 这个错误信息通常出现在Java应用程序崩溃后,而且可能对调试和解决问题造成一些困扰。通过运行"ulimit -c unlimited"命令,我们可以取消生成核心转储文件的限制,从而可以方便地对应用程序进行调试。值得一提的是,这个命令只在当前会话中有效,如果希望永久生效,需要在系统配置文件中进行相应设置。 总之,通过运行"ulimit -c unlimited"命令,在Java应用程序崩溃时就可以生成核心转储文件,以便于进一步的分析和调试。 ### 回答3: 在Java运行过程中,如果程序发生崩溃或异常,通常会生成一个core dump文件,用于分析程序崩溃的原因和进行故障排查。然而,有时候我们在运行程序时会遇到类似于"Failed to write core dump. Core dumps have been disabled."的错误提示。这是因为系统默认情况下禁用了core dumps的写入。 为了解决这个问题,我们可以在再次启动Java之前尝试执行"ulimit -c unlimited"命令。ulimit命令可以用来控制shell会话和进程的资源限制。"-c unlimited"参数表示允许生成无限制大小的core dump文件。 通过执行"ulimit -c unlimited"命令,我们可以临时地修改系统的资源限制,启用core dumping功能。这样,当Java程序出现崩溃时,就可以生成core dump文件了。生成的core dump文件可以通过调试器进行分析,帮助我们定位和解决程序崩溃的问题。 需要注意的是,"ulimit -c unlimited"命令只对当前的shell会话有效,如果重新启动了终端或关闭了会话,该设置将失效。如果需要持久性地启用core dumping功能,可以在系统的配置文件中进行相应的设置。 总之,当我们在Java中遇到"Failed to write core dump. Core dumps have been disabled."的错误时,通过执行"ulimit -c unlimited"命令可以临时地启用core dumping功能,帮助我们进行故障排查和问题定位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值