概述
1.1 巡检概述:
应客户的要求,Oracle工程师对XXXX系统中的webLogic中间件进行了为期2天的健康检查。从整体上来看各系统运行稳定,不存在大的隐患。如果需要疑惑的问题,欢迎继续联系我们售后服务部门解决。
由于检查的系统和主机数量较多,各系统出现的问题也不相同,以下报告会区分各个系统来描述出现问题的起因、造成的现象和影响、并针对性提供解决办法。
1.2 结论概述:
通过对系统的两周来的日志进行分析,发现系统没有因为weblogic或应用的问题而导致内存溢出。其中发现wls2、wls4、wls5在更新应用版本问题时,出现了一次内存溢出。Oracle工程师也对此问题做过技术分析,并对操作系统及weblogic的调整提出了相应的意见。
建议在更新应用版本时,先停止应用,再更新版本。网上营业厅系统健康分析
2. 1 系统环境
系统关联IP地址 OS以及硬件配置 WLS部署情况
10.120.159.81 IBM AIX (9131-52A)
CPU数量:2 × 1648 MHz
RAM(内存): 7904 MB Domain: base_domain
Server: wls5
10.120.159.82 IBM AIX (9131-52A)
CPU数量:2 × 1648 MHz
RAM(内存): 7904 MB Domain: base_domain
Server: wls6
10.120.159.83 IBM AIX (9131-52A)
CPU数量:2 × 1648 MHz
RAM(内存): 7904 MB Domain: base_domain
Server: wls1,AdminServer
10.120.159.84 IBM AIX (9131-52A)
CPU数量:2 × 1648 MHz
RAM(内存): 7904 MB Domain: base_domain
Server: wls2
10.120.159.85 IBM AIX (9131-52A)
CPU数量:2 × 1648 MHz
RAM(内存): 7904 MB Domain: base_domain
Server: wls3
10.120.159.86 IBM AIX (9131-52A)
CPU数量:2 × 1648 MHz
RAM(内存): 7904 MB Domain: base_domain
Server: wls4
2. 2 运行状态分析
1,操作系统运行情况:
针对6台服务器,执行”vmstat”和“topas”命令监测主机性能也没有发现资源利用的不合理现象(CPU都比较空闲、内存硬盘也都比较充足)。
2,Weblogic系统运行情况:
从Admin Console的性能监控模块,各个Server的运行状态都比较健康,尝试执行Full GC之后各Server的JVM堆内存都基本能全部回收,不存在内存泄露。另外请求执行队列,也没有出现排队现象,持续观察了10分钟各Server吞吐量数值变化也很正常。
系统中没有执行时间超时的线程,处于active的线程数量不大。
观察jdbc连接池,能获得连接,性能较好。
3,各weblogic系统产生的日志分析:
通过系统的日志分析weblogic服务器及应用程序出现的错误,找到可能影响系统性能的服务器和应用的地方。举例如下:
1、已经对用户进行响应
java.lang.IllegalStateException: Cannot forward a response that is already committed
at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:110)
at com.qtong.hebmc.ExceptionFilter.doFilter(ExceptionFilter.java:55)
如上异常,为什么对用户的response已经提交给用户了,就要怀疑代码中某些地方在过滤器过滤之前已经显示的提交或关闭了对用户的响应的outputstream。有些时候在过滤器中要做后续的一些处理,这时候filter中出现异常,有可能导致数据库连接不释放及一些后续的处理得不到执行。
2、线程一直处于stuck状态
<[STUCK] ExecuteThread: '32' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "632" seconds working on the request "Http Request: /stat/test/TestCtrl.statOracleTest.do", which is more than the configured time (StuckThreadMaxTime) of "600" seconds.
这句表名��程32执行时间超过600秒设定的时间。检查这个请求是否会导致线程执行超时,是否是长时间的处理。当前系统状态是否正常,是否是cpu、内存等资源不足导致的线程执行缓慢。
重要的一点要查看线程32是否变成unstuck状态。否则就有可能出现线程死锁。
<[STUCK] ExecuteThread: '32' for queue: 'weblogic.kernel.Default (self-tuning)' has become "unstuck".>
3、数据库连接问题
java.sql.SQLException: [BEA][Oracle JDBC Driver]Error establishing socket to host and port: dbnew2_vip:1521. Reason: Connection refused
当出现此问题时,一般系统都执行缓慢。检查是否ping通数据库,是否有权限,也可以请数据库工程师查看数据库是否运行正常。检查dns服务器或本地dns映射是否正常,域名dbnew2_vip能否解析。以及操作系统的tcp参数设置。
4、检查Weblogic记录的Error级别的日志。找到可能影响系统运行及功能的问题。
####<Feb 28, 2010 4:26:20 PM GMT+08:00> <Error> <HTTP> <yanzheng2> <wls6> <ExecuteThread: '1' for queue: 'weblogic.socket.Muxer'> <<WLS Kernel>> <> <> <1267345580932> <BEA-101215> <Malformed Request "/service/js/mareal/mareal.肃移动</option><option value=". Request parsing failed, Code: -1>
此处,说明线程1执行请求“/service/js/mareal/mareal.肃移动</option><option value=”的时候,weblogic对这个请求解析失败,可以请工程师修改请求的格式,以免影响应用的功能。
5、class文件找不到
java.lang.ClassNotFoundException: com.qtong.hebmc.controller.js.mareal.mareal.jobile.com.service.LoginCtrl
at java.lang.Class.forNameImpl(Native Method)
at java.lang.Class.forName(Class.java:130)
at com.mareal.sterna.Controller.parseController(Controller.java:67)
... 20 more
检查控制器是否书写正确,还是这个java文件没有正确编译部署。系统中多处出现这个异常,请注意是否影响某些应用的正常运行。
6、邮件服务器异常
org.apache.commons.mail.EmailException: Sending the email to the following server failed : 218.207.67.75:25
Caused by:
javax.mail.MessagingException: Could not connect to SMTP host: 218.207.67.75, port: 25;
nested exception is:
java.net.SocketException: Connection timed out:could be due to invalid address
检查邮件服务器是否有问题,ip是否冲突,网络连接是否正常,以免影响应用的功能。
7、是否是算法的bug导致的oom。如下:
java.lang.OutOfMemoryError: Initializing Writer
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.initJPEGImageWriter(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.<init>(JPEGImageWriter.java:206)
at com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi.createWriterInstance(JPEGImageWriterSpi.java:130)
at javax.imageio.spi.ImageWriterSpi.createWriterInstance(ImageWriterSpi.java:358)
at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:851)
at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:835)
at javax.imageio.ImageIO.write(ImageIO.java:1473)
at javax.imageio.ImageIO.write(ImageIO.java:1554)
at com.qtong.hebmc.controller.LoginCtrl.smsRandomPic(LoginCtrl.java:267)
应该查看com.sun.imageio.plugins.jpeg.JPEGImageWriter是否存在bug,处理大图片时,是否会导致oom。通过查看它并不是导致系统oom的罪魁祸首,因为通过其他日志发现此时系统以及oom了,所以在给一个对象分配内存时也出现oom的异常。
8、程序的一般常见的异常
java.lang.StringIndexOutOfBoundsException
at java.lang.String.substring(String.java:1088)
at com.qtong.hebmc.controller.nethall.ChongZhiKaChaXunCtrl.transact(ChongZhiKaChaXunCtrl.java:25)
应该在程序中避免这类异常的发生。
2. 3 结论以及解决方案
系统偶尔出现的oom不是因程序导致的。 经上次对weblogic和操作系统进行优化后,系统出现oom的次数大大减少。从日志看来,只有应用的版本更新才会偶���导致oom。
6台IBM AIX主机运行情况良好,但操作系统还有待更进一步的优化。
建议:下次更新版本时,应该先在weblogic控制台停止这个应用,然后更新版本,以免影响应用。
该贴由koei转至本版2014-5-2 16:06:33