Linux问题情报分享(1):内核Stack Clash补丁导致Java程序启动失败

简介: 突然发现Java程序无法启动。或者内核升级后Java程序无法启动。那么,很可能是内核Stack Clash补丁导致的。

关于Stack Clash,缺少耐心的读者,请参考Stack Clash 漏洞正粉碎 Linux 防御危及 root 权限,较全面的介绍请参考Stack Guard Page Circumvention Affecting Multiple Packages
各个Linux发行版都已经发布了升级,合并了上游补丁。 上游补丁通过增大stack guard gap(堆栈保护措施,更多请参考Buffer overflow protection)尺寸到1M的方式,修复了Linux Kernel Stack Clash安全漏洞。但是,这个修正会导致JVM崩溃。

终端显示问题可能是这样的

# A fatal error has been detected by the Java Runtime Environment:

#

# SIGBUS (0x7) at pc=0x00007f0d190f6ec3, pid=17221, tid=0x00007f0d2be12740

#

# Problematic frame:

# j java.lang.Object.()V+0

调试coredump,结果可能是这样的

41A6E8C871E0231234617A2F0862DB96

总的说来,就是Java程序启动失败。

这个问题会影响CentOS5, 6, 7和部分Debain发行版本。

临时解决方案的实质是给JVM指定线程堆栈为2M并且重启之。

对于具体应用,这可以通过给java命令行(或者适当的命令行)增加“-Xss2m”参数或者通过配置文件来调整。也可以通过环境变量JAVA_OPTS(或者对于tomcat,CATALINA_OPTS)来调整。比如

CATALINA_OPTS="${CATALINA_OPTS} -Xss2m"

如果是JNI方式,则可以通过环境变量JAVA_TOOL_OPTIONS来处理。对于这个环境变量,更多信息请参考Linux系统小技巧(4):环境变量JAVA_TOOL_OPTIONS简介

相关文章
|
1天前
|
存储 算法 Linux
【Linux】线程的内核级理解&&详谈页表以及虚拟地址到物理地址之间的转化
【Linux】线程的内核级理解&&详谈页表以及虚拟地址到物理地址之间的转化
|
1天前
|
存储 Linux
【Linux】对信号产生的内核级理解
【Linux】对信号产生的内核级理解
|
1天前
|
Linux 编译器 调度
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
本文介绍了如何将POSIX应用程序编译为在Xenomai实时内核上运行的程序。
15 1
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
|
1天前
|
算法 Linux 调度
xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
6 1
xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
|
1天前
|
Linux 调度 数据库
|
1天前
|
存储 缓存 Linux
xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(三)--实时与非实时数据交互
本文介绍了Xenomai中的XDDP(Xenomai Distributed Data Protocol)通信机制,XDDP用于实时和非实时进程之间的数据交换。XDDP在Xenomai内核中涉及的数据结构和管理方式,以及创建XDDP通道后的实时端和非实时端连接过程。
7 0
xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(三)--实时与非实时数据交互
|
2天前
|
缓存 安全 网络协议
Linux内核详解,什么是linux内核?
Linux内核详解,什么是linux内核?
12 0
|
3天前
|
存储 缓存 安全
Linux系统内核面试题
Linux系统内核面试题
18 3
|
4天前
|
缓存 运维 算法
深入理解Linux内核的虚拟内存管理
【5月更文挑战第6天】 在现代操作系统中,尤其是类Unix系统如Linux中,虚拟内存管理是一项核心功能,它不仅支持了多任务环境,还提供了内存保护和抽象。本文将深入探讨Linux操作系统的虚拟内存子系统,包括分页机制、虚拟地址空间布局、页面置换算法以及内存分配策略。通过对这些概念的剖析,我们旨在为读者揭示Linux如何有效地管理和优化物理内存资源,并确保系统的稳定运行与高效性能。
|
4天前
|
Linux 调度 开发者
探索Linux内核调度:公平与效率的平衡艺术
【5月更文挑战第6天】 随着多核处理器的普及,操作系统的进程调度策略对系统性能的影响愈加显著。Linux作为广泛应用的开源操作系统,其内核调度器的设计哲学和实现细节一直是系统研究领域的热点。本文将深入分析Linux内核调度器的工作原理,探讨如何在保证公平性和效率之间取得平衡,并考察最新的调度器CFS(Completely Fair Scheduler)如何适应现代硬件架构的需求。