昨天项目上线,在完成验证之后,我深吸一口气,完美上线,未出任何问题。然而半个小时之后,收到运维团队发过来的告警,说是有一台服务器的几个端口未被探测到。当时听说之后,我心中一紧,不对呀,我们服务器之后都观察了系统日志,交易一切正常,如果系统启动异常,日志是不会打印的。于是,我赶紧去操作间登录服务器,检测端口。

netstat -anpl | grep 1099

netstat -anpl | grep 8900

输出显示,端口确实未启动。但系统对外服务的端口一切正常。于是我们找到系统启动日志,定位到如下异常:

于是在网上搜索关于Failed to write core dump的文章,很多,但跟我们这次遇到的问题并不一致。

于此同时,我们发现在启动脚本目录下多了一个日志文件hs_err_pid13893.log,这个文件就是JVM在启动时出现异常的线程堆栈信息,内容描述如下:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGBUS (0x7) at pc=0x00007fa0a94e14e2, pid=13893, tid=0x00007f9e8fefe700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_172-b11) (build 1.8.0_172-b11)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.172-b11 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  [libzip.so+0x124e2]  newEntry+0x62
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#---------------  T H R E A D  ---------------Current thread (0x00007f9ed4111000):  JavaThread "pool-FramePools-thread2" [_thread_in_native, id=14081, stack(0x00007f9e8fdfe000,0x00007f9e8feff000)]siginfo: si_signo: 7 (SIGBUS), si_code: 2 (BUS_ADRERR), si_addr: 0x00007f9efc0cb0faRegisters:
RAX=0x00007f9ee830cc60, RBX=0x00007f9f6e0e1e00, RCX=0x0000000000000000, RDX=0x00007f9ee830cc60
RSP=0x00007f9e8fefb4b0, RBP=0x00007f9e8fefb500, RSI=0x0000000000000000, RDI=0x00007f9ee8000020
R8 =0x00007f9ee8000088, R9 =0x00007f9e8fefb580, R10=0x0000000000000048, R11=0x00000000c6bfe5f0
R12=0x00007f9efc0cb0dd, R13=0x00007f9ee830cc60, R14=0x000000001cb26b69, R15=0x00007f9f6e0de110
RIP=0x00007fa0a94e14e2, EFLAGS=0x0000000000010206, CSGSFS=0x0000000000000033, ERR=0x0000000000000004TRAPNO=0x000000000000000eTop of Stack: (sp=0x00007f9e8fefb4b0)
0x00007f9e8fefb4b0:   00000000c6b13fe0 0000000100000000
0x00007f9e8fefb4c0:   00007f9f6e0de1e0 00007fa0b4c1a02e
0x00007f9e8fefb4d0:   00007f9ee830cc60 00007f9f6e0e1e00
0x00007f9e8fefb4e0:   00007f9f6e0e10b0 00007f9f6e0de110
0x00007f9e8fefb4f0:   000000001cb26b69 000000000000004f
0x00007f9e8fefb500:   00007f9e8fefb560 00007fa0a94e1c3f
0x00007f9e8fefb510:   00007f9ed4111000 0100000000000000
0x00007f9e8fefb520:   00007f9e8fefb580 00007f9e8fefb5d0
0x00007f9e8fefb530:   00007f9e8fefb5ce 00007f9e8fefb580
0x00007f9e8fefb540:   000000000000004f 00007f9ed41111f8
0x00007f9e8fefb550:   00007f9e8fefb9d8 0000000000000001
0x00007f9e8fefb560:   00007f9e8fefb9c0 00007fa0a94d2e90
0x00007f9e8fefb570:   00007fa09a4cf7a7 00007f9f6e0de110
0x00007f9e8fefb580:   672f63642f6d6f63 636e616e7265766f
0x00007f9e8fefb590:   61646174656d2f65 736c706d692f6174
0x00007f9e8fefb5a0:   656d69746e75722f 5f72656b6361502f
0x00007f9e8fefb5b0:   6465525f736e6f63 56626d4362625a6d
0x00007f9e8fefb5c0:   4f534a5f6f745f31 007373616c632e4e
0x00007f9e8fefb5d0:   00007f9e8fefb650 0000000000800000
0x00007f9e8fefb5e0:   00007f9ee8000078 00007f9ee8000020
0x00007f9e8fefb5f0:   00007f9ee8000020 0000000000000000
0x00007f9e8fefb600:   0000000000008010 00000038ad67a567
0x00007f9e8fefb610:   00007f9ed4111000 0000000000008000
0x00007f9e8fefb620:   00007f9e8fefb690 00007f9e8fefb868
0x00007f9e8fefb630:   000000768fefb690 0000000000000200
0x00007f9e8fefb640:   0000000000000040 0000000000000000
0x00007f9e8fefb650:   0000000000000001 0000000000000008
0x00007f9e8fefb660:   0000000000008030 0000023000000801
0x00007f9e8fefb670:   0000007c0000009b 0000007600000078
0x00007f9e8fefb680:   00007fa09a515f20 00007f9ee8000020
0x00007f9e8fefb690:   0000000000008000 0000000000000000
0x00007f9e8fefb6a0:   0000000000000019 00000000c6bfe409 Instructions: (pc=0x00007fa0a94e14e2)
0x00007fa0a94e14c2:   00 48 c7 40 28 00 00 00 00 41 80 7f 30 00 0f 84
0x00007fa0a94e14d2:   8a 02 00 00 4c 8b 63 08 4d 2b 67 28 4d 03 67 18
0x00007fa0a94e14e2:   41 0f b6 5c 24 1d 41 0f b6 44 24 1c c1 e3 08 09
0x00007fa0a94e14f2:   c3 41 0f b6 44 24 1e 88 45 bd 41 0f b6 54 24 20 Register to memory mapping:RAX=0x00007f9ee830cc60 is an unknown value
RBX=0x00007f9f6e0e1e00 is an unknown value
RCX=0x0000000000000000 is an unknown value
RDX=0x00007f9ee830cc60 is an unknown value
RSP=0x00007f9e8fefb4b0 is pointing into the stack for thread: 0x00007f9ed4111000
RBP=0x00007f9e8fefb500 is pointing into the stack for thread: 0x00007f9ed4111000
RSI=0x0000000000000000 is an unknown value
RDI=0x00007f9ee8000020 is an unknown value
R8 =0x00007f9ee8000088 is an unknown value
R9 =0x00007f9e8fefb580 is pointing into the stack for thread: 0x00007f9ed4111000
R10=0x0000000000000048 is an unknown value
R11=

关键内容如下:

大致含义是java虚拟机在启动的时候发生了原始异常,产生问题的框架是:C  [libzip.so+0x124e2]  newEntry+0x62。于是又在网上搜索C  [libzip.so+0x124e2]  newEntry+0x62,最终搜到这篇文章:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8214788,这是JVM的一个BUG,java在操作zip文件的时候会调用linux系统libzip.so库,如果在jvm运行的时候做了zip文件操作,而此时zip文件做了修改,就会有JVM崩溃的风险。在oracle的java bug  database中搜索,发现有很多类似的问题:

当然,Oracle官方也给出了解决方案:

1、在JVM启动参数中加入:-Dsun.zip.disableMemoryMapping=true ,但该方案有一个风险,会导致jvm在磁盘读取jar文件的时候有巨大的性能风险,当然前提是你一遍又一遍的读。然而,我在网上搜索关于类似的问题的时候,发现有网友加了该启动参数却又遇到了其他问题。

2、升级到JDK9。该问题在这个版本得到了完美解决。

总结: 我们系统在启动的时候会加载zip文件,可能当时我们的操作人员未等其他服务器启动完毕,就立即重启了下一台服务器,碰巧两台服务器都在对同一个zip文件做操作,就导致JVM没有完全启动。

记一次生产上线的问题相关推荐

  1. 记一次重大的生产上线事故,借此反思成长

    目录 写在前面 生产上线出现问题 问题1:logger日志没打印报错信息 问题2:日志打印不全的问题 问题3:equals报空指针问题 问题4:还是空指针问题 问题5:json报文字段上送有误 问题6 ...

  2. 悬崖边上的舞者,记7.2生产数据库灾难事件

    悬崖边上的舞者,记7.2生产数据库灾难事件 作者:张子良 版权所有,转载请注明出处 引子:出事了 7月2日是一个难得的大晴天,一段时间以来桂林一直在下雨,一直下,害的我减肥的计划一再的泡汤,因为下雨每 ...

  3. 记一次生产环境脚本入侵检测与报警案例(检测特定目录被改动,自动报警)

    需求 : 特定目录,改动之后,自动报警. 转载来源 : 记一次生产环境脚本入侵检测与报警案例(简易版入侵检测系统) : http://www.safebase.cn/article-259102-1. ...

  4. 记一次生产数据库事故

    记一次生产数据库事故 事故起因 事故故事 事故现场 事故起因 最后在做报表,报表的数据产生是直接在只读库上面进行的.但因数据量大需要对表做优化,现行优化方式为简单粗暴的加索引. 另外说明一数据库用的是 ...

  5. Java实习阶段兼生产上线总结

    生产上线总结与实习代码编写踩坑记录 实习阶段性整理 代码方面 NullPointException 日志 业务方面 总结 实习阶段性整理 想写出好的文章,但是奈何表达能力不行外加技术能力也不行.只能以 ...

  6. gc日志一般关注什么_记一次生产频繁出现 Full GC 的 GC日志图文详解

    场景描述 相信大家都了解 jps.jmap.jstack 等常用 java 堆栈输出命令,有过 dump.gc 分析的经验,面试中会经常被问到有关 JVM 问题,比如你是否了解你的程序在生产环境的基础 ...

  7. 生产事故 java_记一次生产事故:30万单就这样没了!

    背景 你好,我是彤哥. 昨天晚上下班回家,在地铁上,老大突然打来电话,B系统生产环境响应缓慢,影响了A系统的使用,几万小哥收不了单,大概有30万单卡住了,你去帮忙定位一下. 我8点半左右到家,立马上线 ...

  8. Exceeded checkpoint tolerable failure threshould【记一次flink上线异常】

    最近完成一个业务需求,flink程序上线之后,跑了不到一分钟就挂了,查看日志,报错如下: org.apache.flink.util.FlinkRuntimeException: Exceeded c ...

  9. 深入认识二进制序列化--记一次生产事故的思考

    来自:特来电云计算与大数据 一 概要 二进制序列化是公司内部自研微服务框架的主要的数据传输处理方式,但是普通的开发人员对于二进制的学习和了解并不深入,容易导致使用过程中出现了问题却没有分析解决的思路. ...

最新文章

  1. java垃圾回收机制_乐字节Java|GC垃圾回收机制、package和import语句
  2. 动态链接库dll,静态链接库lib, 导入库lib
  3. jupyter-使用及设置密码
  4. PHPStorm不能修改PHP langauge level
  5. 腾讯、阿里、网易、杰士邦等30家中秋月饼设计盘点!(完整版)
  6. OJ1017: 表面积和体积
  7. Eigen官网教程(6) Map类
  8. Linux 命令(48)—— stat 命令
  9. java功能模块_Java 13功能
  10. 编译Caffe错误:libpython3.5m.a(abstract.o): relocation R_X86_64_32S against
  11. 页面导出excel的三种方式
  12. 如何在计算机管理路由器,怎么查看路由器的管理IP地址?
  13. 一文读懂PCB品质体系认证
  14. 截止2021年7月中国有多少大学生?
  15. linux 浮点异常,浮点数学函数异常处理方法
  16. 获取 Panabit Linux 版 root 密码
  17. 电脑连接宽带,给手机开热点
  18. 火到服务器瘫痪了,这款小游戏太火爆了,合成大西瓜
  19. 【学习笔记】Python基础入门知识笔记,万字攻略带你走进Python编程
  20. linux32系统下载地址,deepin 15.3 32位ISO下载地址,深度系统最后支持32位的版本

热门文章

  1. cache line对内存访问的影响
  2. 【求由正方形组成的图形的周长】C++实现
  3. 「黑镜」回归!剧中的杀戮机械狗或在两年内来到你身边
  4. 计算机主机突然断电有什么影响吗,断电对电脑硬件会产生哪些影响
  5. vue组件走马灯_vue文字横向滚动走马灯公告代码示例
  6. rsa 长密钥实现及测试
  7. 如果想做数据标注,你可能会遇到哪些坑?
  8. php面试时的自我称呼,求职者不知道在面试时该如何称呼hr?
  9. ORB-SLAM3从理论到代码实现(一):Optimizer单帧优化
  10. CUP 三级缓存L1 L2 L3 cahe详解