WebLogic JVM Core dumps文件的生成控制

一,背景

当我们运行的WebLogic JVM发生Fatal Error时,会造成JVM crash掉,进而造成进程终止。一般来说crash的时间我们是无法估计在什么时候的,它具有很大的偶然性,因此理论上有时我们希望自动产生Core dump文件来提供我们事后分析的信息记录。默认我们的系统是没有enable这个功能的,因此我们可以尝试开启。

1.1 core dump说明

core文件简介
core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试。当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文件,默认生成位置与可执行程序位于同一目录下,文件名为core.***,其中***是某一数字。

核心转储(core dump),在汉语中有时戏称为吐核,是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件。这种信息往往用于调试。当一个进程要异常终止时,可以选择把进程的用户空间内存数据全部保存到磁盘上,文件名通常是core,这叫做Core Dump。进程异常终止通常是因为程序错误,比如非法内存访问导致段错误, 事后可以用调试器检查core文件以查清错误原因,这叫做Post-mortem Debug(事后调试)。
一个进程允许 产生多大的core文件取决于进程的Resource Limit(这个信息保在PCB中)。默认是不允许产生core文件的, 因为core文件中可能包含用户密码等敏感信息,不安全。在开发调试阶段可以用ulimit命令改变这个限制,允许产生core文件。

一个core文件里,包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理等信息,也就是把程序当时工作的状态存储成一个文件。不仅仅是在出错的时候会生成core dump文件,在系统卡住或者cpu使用率很高的时候也可以手动触发生成core dump文件。

1.2 手动模拟crash

Kill -11 <PID>

信号11(SIGSEGV)是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号。

二,开启JVM crash自动产生Java core dump

2.1 测试环境:

OS: Red Hat Enterprise Linux Server release 6.7 (Santiago)

WebLogic Server 版本: 12.2.1.2.0

2.2 开启JVM crash自动产生Java core dump

core dump文件生成开关其实是通过对生成的文件大小进行控制达到的,默认大小是0,也就是说默认是不生成core dump文件的,可以通过命令ulimit -c进行查看。将此参数修改成unlimited就可以生成core dump文件了,但值得注意的一点是,每个应用进程都会读取自己的一套系统参数,可以查看进程对应的内存文件/proc/<pid>/limits中的信息来判断修改后的参数值是否对此应用进程生效了,limits文件中的信息如下:

查看core文件生成功能是否打开,如下若是0,则表示没有打开。
$ ulimit -c
0
修改为可以生成core dump文件:
1)临时设置
示例1:如下设置4G,单位为kbyte。
如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件。在调试此core文 件的时候,gdb会提示错误。
# ulimit -c 4194304
示例2:不限制大小。
$ ulimit -c unlimited
$ ulimit -c
unlimited

2)永久设置

# echo " * soft core unlimited" >> /etc/security/limits.conf
# echo " * hard core unlimited" >> /etc/security/limits.conf

然后重启服务器或重新登录即可生效。

查看具体应用进程的core dump参数设置:

$ ps -ef |grep Server1
weblogic 13463 13412 99 01:40 ?        00:00:34 /usr/java/jdk1.8.0_144/bin/java -server -Xms256m -Xmx512m -Dweblogic.Name=Server1 -Djava.security.policy=/home/weblogic/Oracle/Middleware/Oracle_Home/wlserver/server/lib/weblogic.policy -Dweblogic.ProductionModeEnabled=true -Dweblogic.system.BootIdentityFile=/home/weblogic/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/servers/Server1/data/nodemanager/boot.properties -Dweblogic.nodemanager.ServiceEnabled=true -Dweblogic.nmservice.RotationEnabled=true -Djava.sys

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
生成 WebLogic 镜像文件的基本步骤如下: 1. 准备一个 WebLogic 安装程序,如 wls1036_generic.jar。 2. 编写一个 Dockerfile 文件,指定使用的基础镜像、安装 WebLogic、创建域、配置管理员账户等。 3. 在 Dockerfile 所在目录执行 `docker build` 命令,生成镜像文件。 下面是一个简单的示例 Dockerfile 文件: ``` FROM oraclelinux:7-slim # 设置环境变量 ENV MW_HOME=/u01/oracle \ DOMAIN_NAME=base_domain \ ADMIN_PASSWORD=welcome1 # 安装必要软件 RUN yum install -y java-1.8.0-openjdk-devel unzip && \ yum clean all && \ rm -rf /var/cache/yum # 拷贝 WebLogic 安装程序 COPY wls1036_generic.jar /u01/ # 安装 WebLogic RUN java -jar /u01/wls1036_generic.jar -mode=silent -silent_xml=/u01/silent.xml && \ rm /u01/wls1036_generic.jar /u01/silent.xml # 创建域 RUN $MW_HOME/wlserver_10.3/common/bin/wlst.sh -skipWLSModuleScanning /u01/create-domain.py # 暴露管理控制台端口 EXPOSE 7001 # 启动 WebLogic 服务 CMD ["/u01/oracle/user_projects/domains/base_domain/startWebLogic.sh"] ``` 在该示例中,我们使用的基础镜像是 Oracle Linux 7,安装了 Java 8 和 unzip。我们将 WebLogic 安装程序 wls1036_generic.jar 拷贝到镜像中,并在 Dockerfile 中执行安装过程。安装完成后,我们使用 WLST 脚本 create-domain.py 创建了一个名为 base_domain 的域,并配置了管理员密码为 welcome1。最后,我们暴露了管理控制台端口 7001,并在启动容器时执行了启动 WebLogic 服务的命令。 使用以下命令来构建并运行该示例镜像: ``` docker build -t weblogic:10.3.6 . docker run -d -p 7001:7001 weblogic:10.3.6 ``` 其中,`-t` 指定镜像名称和版本,`.` 表示 Dockerfile 文件所在目录。`-d` 表示在后台运行容器,`-p` 指定容器内外端口映射。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yangkei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值