通用方案:专有云V3环境如何修复account-lite-web-aliyun-com容器内JVM内存值过高的风险
1. 概述
本文主要介绍在专有云V3环境中,如何修复account-lite-web-aliyun-com容器内JVM内存值过高的风险。
1.1. 适用范围
- 专有云V3,基础服务设备
说明:本文适用于V3.0.0~V3.8.0的版本,包含V3.0.0的版本,不包含V3.8.0的版本。
1.2. 用户告知
- 操作方式:黑屏
- 操作复杂度:低
- 风险等级:低
说明:操作过程中需要重启Java进程。若在重启过程中,同服务的其他实例也在同时重启,可能会导致服务不可用。考虑到服务有多个实例,全部实例同时重启的概率很小,同时Java进程的启动速度较快,综合评估风险为低风险。
- 由于account-lite-web-aliyun-com和account-session-aliyun-com容器修改内存参数的步骤一致,以下操作以修改account-lite-web-aliyun-com容器的内存参数为例。
2. 问题描述
专有云V3环境baseService-aas服务的account-lite-web-aliyun-com和account-session-aliyun-com容器,默认只分配了2GB内存,但是Java进程的-Xmx
参数的值为6GB或者大于2GB。若内存分配不合理,可能会出现主备容器的Java进程出现OOM,从而导致进程被结束、服务不可用,进而影响业务。
3. 解决方案
3.1. 环境检查
- 登录天基控制台,在服务框中搜索aas,单击运维,进入服务运维页面。
- 在服务运维详情页面,单击服务实例,单击StandardCloudCluster-A-XXXX。
- 进入服务实例Dashboard页面,找到服务角色列表,单击AccountLiteWebAliyunCom#服务角色右侧的详情。
- 在机器信息表中,单击机器右侧的终端,登录AccountLiteWebAliyunCom#服务角色所在的机器。
- 执行以下命令,查看物理机的主机名和IP地址。
cat /etc/hostinfo
- 将以下脚本上传至物理机的
/tmp
目录中。
check_jvm_cgroup.sh - 登录物理机,执行以下命令,执行
check_jvm_cgroup.sh
脚本。
sh /tmp/check_jvm_cgroup.sh
若提示以下内容,则表示存在JVM内存过高的风险,需要修复。
若提示以下内容,则表示不存在JVM过高的风险,不需要修复。 - 登录account-lite-web-aliyun-com容器,执行以下命令,确认Java进程的
Xmx
参数的值为6g
。
free -m;ps aux|grep java|grep --color Xmx
系统显示类似如下。
3.2. 实施步骤
- 登录account-lite-web-aliyun-com容器,执行以下命令,备份Java进程的配置文件。
cp /etc/jetty/start.ini /etc/jetty/start.ini-`date +%F`
- 编辑
/etc/jetty/start.ini
文件,将-Xmx
的值修改为1400m
,将-Xms
的值修改为1400m
,退出并保存。 - 执行以下命令,确认修改成功。
head -25 /etc/jetty/start.ini|tail -3
系统显示类似如下。 - 执行以下命令,重启Jetty应用,使配置生效。
/etc/init.d/jetty restart
- 执行以下命令,确认返回结果为“OK”。
/alidata/bin/check_health
- 等待十分钟之后,参考以上步骤,修复另一个account-lite-web-aliyun-com容器JVM内存值。
3.3. 结果验证
逐台登录account-lite-web-aliyun-com容器,执行以下命令,确认修改符合预期。
ps aux|grep java|grep --color Xm
系统显示类似如下。
4. 回滚方案
- 登录account-lite-web-aliyun-com容器,执行以下命令,将备份的文件还原。
cp /etc/jetty/start.ini-[$Date] /etc/jetty/start.ini
说明:[$Date]为当前时间。
- 执行以下命令,重启Jetty应用,使配置生效。
/etc/init.d/jetty restart