资源描述
客户系统健康检查报告
23
2020年4月19日
文档仅供参考
XXXX客户系统健康检查报告
一、 综述 3
二、 系统环境 3
核心业务系统 3
三、 工作日志 4
四、 系统健康检查详细列表 4
1. 核心业务系统 4
五、 日常维护建议 10
六、 故障出现时,系统处理的步骤 11
七、 命令介绍 11
一、 综述
应XXXX客户要求,倚博公司中间件技术专家针对客户的核心业务系统做了一次完整的系统健康检查。
整体上讲,公司的核心系统运行比较稳定,故障率和客户业务系统的MTBF (Mean Time Between Failure)都比较小。
但从系统维护的管理工作的规范和完善角度讲,还未建立完善中间件的维护,监控的方案。现阶段,主要是利用维护人员的现场应急处理经验保证系统的运行正常,未合理的规划维护流程,未确认中间件的监控指标,未建立完善的监控,预警和应急处理方案。
本文档总结了这次现场工作的各项情况,并根据现场维护人员的要求,增加了系统维护方法的扼要说明。
二、 系统环境
核心业务系统
客户系统名称:核心业务系统
OS CPU:8
OS Memory: 16 GB
OS: Red Hat AS 4
KENERL: 2.6.9-42.ELsmp
JBOSS Application Server 4.2.3
JDK:
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_17-b04)
Java HotSpot(TM) Server VM (build 1.5.0_17-b04, mixed mode)
三、 工作日志
6月5日 上午 9:30 系统健康检查
四、 系统健康检查详细列表
1. 核心业务系统
操作系统配置检查
系统配置:
名称
建议值
实际值
是否符合要求
操作系统版本
Linux/Hp
Red Hat AS4
Y
主机名
N/A
App1
Y
CPU
> 1GHZ
8*1.9G,
Y
内存
> 2G
16G
Y
磁盘空间
>20G
360G
Y
系统内核参数:
名称
建议值
实际值
是否符合要求
说明
文件句柄数
4096或更大
8192
Y
进程的最大文件句柄数
JAVA虚拟机配置检查
虚拟机安装路径:/opt/jdk1.5.0_17/
名称
建议值
实际值
是否符合要求
说明
JVM 版本
1.5
JDK 1.5.0_17
Y
JVM HEAP初始值 -Xms
514M
1024M
Y
JVM HEAP最大值 -Xmx
512M-1536M
1536M
Y
Permsize
64M
256M
JBOSS配置检查
安装路径:/opt/jboss/jboss-4.2.3.GA
参数
值
建议值
说明
线程数
400
一个CPU对应50个线程左右
线程的个数应与CPU的处理能力匹配。
JSP编译的调试信息标志
false
false
生产环境中建议将JSP编译调试功能关闭,减少因编译占用系统资源对系统的影响。
开发模式的设置
false
false
应用使用的连接池数量
400
400
生产环境中建议将连接的数量与线程总数保持统一。
应用使用的连接池初始值
100
400
最小值和最大值保持一致,避免运行状态在创立连接时消耗系统资源。
连接池Prepared Statement Cache
无
10
缺省JBOSS服务器是不会Cache Prepared Statement对象的,为了提高性能我们能够设定每个连接Cache的 Prepared Statement对象的个数
运行期系统状态检查
名称
平均值
峰值
是否异常
CPU
35%以下
60%
未出现长时间CPU使用率超过100%
内存使用
3.5G以下
无页交换的情况
磁盘空间
20%
满足应用日志或者JBOSS日志所用磁盘空间要求
网络流量
200K/S
800K/S
无网络阻塞和网络风暴
运行期虚拟机状态检查
名称
实际情况
是否符合要求
说明
JVM HEAP最小值
280M
Y
JVM HEAP最大值
1100M
Y
为今天的观察结果
运行期JBOSS组件状态检查
名称
正常值
实际值
是否符合要求
说明
线程使用情况
使用率<50%
<70%
Y
启动目录core文件的检查
在JBOSS启动目录中发现”core”文件和”hs_err_pid*.log”的错误日志文件,说明系统出现过JVM core dump和异常退出故障,故障出现在一个虚拟机的解压缩操作,希望能经过进一步与开发商,维护人员沟通找出具体的故障原因,并提出解决方案。
日志检查
名称
建议值
实际值
是否符合要求
说明
日志中Error信息检查
Review All Logs
Review All Logs
N
对日志中Error消息进行检查,参考下面例子。
日志文件中发现错误信息如下:
1) 启动JBoss时报如下错误:出现过一次
22:53:52,907 ERROR [MainDeployer] Could not create deployment: file:/D:/新建文件夹/jboss-4.2.2.GA/server/default/conf/jboss-service.xml
org.jboss.deployment.DeploymentException: - nested throwable: (java.lang.reflect.UndeclaredThrowableException)
at org.jboss.system.ServiceConfigurator.install(ServiceConfigurator.java:196)
at org.jboss.system.ServiceController.install(ServiceController.java:226)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
at $Proxy4.install(Unknown Source)
at org.jboss.deployment.SARDeployer.create(SARDeployer.java:249)
at org.jboss.deployment.MainDeployer.create(MainDeployer.java:969)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:818)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:766)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
at $Proxy5.deploy(Unknown Source)
at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:482)
at org.jboss.system.server.ServerImpl.start(ServerImpl.java:362)
at org.jboss.Main.boot(Main.java:200)
at org.jboss.Main$1.run(Main.java:508)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.UndeclaredThrowableException
at org.jboss.system.ServiceCreator.install(ServiceCreator.java:236)
at org.jboss.system.ServiceConfigurator.internalInstall(ServiceConfigurator.java:451)
at org.jboss.system.ServiceConfigurator.install(ServiceConfigurator.java:171)
... 36 more
Caused by: java.lang.Error: ERROR: it turns out the root cause is not always a runtime exception!
at org.jboss.mx.server.MBeanServerImpl.handleInstantiateExceptions(MBeanServerImpl.java:1295)
at org.jboss.mx.server.MBeanServerImpl.instantiate(MBeanServerImpl.java:1237)
at org.jboss.mx.server.MBeanServerImpl.instantiate(MBeanServerImpl.java:286)
at org.jboss.mx.server.MBeanServerImpl.createMBean(MBeanServerImpl.java:344)
at org.jboss.system.ServiceCreator.install(ServiceCreator.java:157)
... 38 more
jboss-service.x配置错误,经过修改具体错误配置,并解决了这个问题。
2) NoClassDefFoundError错误,当前的类装载器不能找到这个类文件,频率:出现一次
java.lang.NoClassDefFoundError: Could not initialize class org.jboss.aspects.security.SecurityActions$ContextInfoActions
at org.jboss.aspects.security.SecurityActions.getContextException(SecurityActions.java:467)
at org.jboss.aspects.security.AuthenticationInterceptor.authenticate(AuthenticationInterceptor.java:131)
at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:66)
at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:240)
at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:210)
at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:84)
at $Proxy147.getInitConfigAsInteger(Unknown Source)
at com.police.alarm.AlarmAction.execute(AlarmAction.java:28)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.police.filter.SystemUserFilter.doFilter(SystemUserFilter.java:61)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.police.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at .JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:619)
NoClassDefFoundError错误,经过找到类所在的文件,并经过正确配置或使其在正确的类路径中来解决此问题。
故障汇总
1) 在JBOSS启动目录中发现”core”文件和”hs_err_pid*.log”的错误日志文件,说明系统出现过JVM core dump和异常退出故障,故障出现在一个虚拟机的解压缩操作,希望能经过进一步与开发商,维护人员沟通找出具体的故障原因,并提出解决方案。
2) 部署问题,部署描述符配置错误,需仔细检查部署描述符号。
3) NoClassDefFoundError,原因为在当前的类装载器路径中,不能找到相关的类文件,需检查类装载路径里面是否存在这个类文件
4) 监听端口配置问题。
在分配服务器的监听端口时,需检查操作系统中这个端口是否被占用。
Netstat –an | grep port
另外,也需要咨询系统管理员对主机端口的分配。
五、 日常维护建议
管理上,建议安排专人负责中间件的管理和维护,负责应用的部署,保证中间件的稳定运行。对于日常维护工作能够从以下几个方面入手:
1) 系统运行的监控和调优
¨ 监控操作系统的内存和CPU使用状况
¨ 虚拟机内存和线程的使用情况
¨ 各个主要应用的并发访问情况
2) 日志文件的管理
¨ 日志文件合理规划空间,不同类型日志使用不同的文件路径
¨ 过期的日志文件定时存档清理
3) 应用程序的更新和部署
4) 系统出现故障时的应急处理
倚博能够为客户提供完整的系统监控方案,系统维护手册和系统应急处理方案,满足客户对系统高可用性,规范维护和预防性维护的需求。
六、 故障出现时,系统处理的步骤
1) 观察硬件的CPU和内存使用情况并记录
Vmstat,top等命令。
2) 经过”ps –ef”命令中观察JBOSS对应的Java进程是否存在
3) 使用”kill -3 pid”来生成系统的线程堆栈,查看是否所有线程的运行状态都正常,跟踪并解决长时间运行的任务。
4) 查看日志并收集日志。收集的日志包括(nohup.out,jboss server.log)
七、 命令介绍
Linux操作系统
查看系统内核版本命令:uname -a
查看CPU配置: grep "model name" /proc/cpuinfo
查看内存配置:more /proc/version
查看进程的各项阈值:”ulimit –a”
设置文件句柄数:”ulimit –n 4096”
查看CPU运行状态: vmstat,top
查看IO状态: iostat
查看文件句柄数 : lsof –p pid
Java进程的线程堆栈:”kill -3 pid
展开阅读全文