问题现象
顾问在录取spr日志时,发现系统一直在前台处理性能数据,一直未弹出html页面。
问题分析
首先排查服务器时间,发现服务器时间与标准时间差了3min。图为已经调整的。
再录制过程中显示时间已经变更为正确时间。
由于未显示具体操作人,通过客户端IP和指定服务访问的方式判断相关线程信息。
查看NMC发现时间基本卡在代码层面。
线程堆栈
java">## 关键信息已打码
java.io.FileInputStream.readBytes(Native Method)
java.io.FileInputStream.read(FileInputStream.java:255)
java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
java.io.BufferedInputStream.read(BufferedInputStream.java:345)
sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:322)
sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:364)
sun.nio.cs.StreamDecoder.read(StreamDecoder.java:210)
java.io.InputStreamReader.read(InputStreamReader.java:205)
java.io.BufferedReader.fill(BufferedReader.java:165)
java.io.BufferedReader.readLine(BufferedReader.java:328)
java.io.LineNumberReader.readLine(LineNumberReader.java:210)
nc.bs.framework.mx.xxx.LogQuery.checkFileTsError(LogQuery.java:135)
nc.bs.framework.mx.xxx.LogQuery.getEffFile(LogQuery.java:109)
nc.bs.framework.mx.xxx.LogQuery.getEffFile(LogQuery.java:100)
nc.bs.framework.mx.xxx.LogQuery.getEffFile(LogQuery.java:100)
nc.bs.framework.mx.xxx.LogQuery.query(LogQuery.java:26)
nc.bs.framework.mx.monitor.MonitorServlet.queryLog(MonitorServlet.java:235)
nc.bs.framework.mx.monitor.MonitorServlet.doAction(MonitorServlet.java:78)
nc.bs.framework.server.InvokerServlet.doAction(InvokerServlet.java:185)
nc.bs.framework.server.InvokerServlet.doPost(InvokerServlet.java:72)
javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1224)
com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:774)
com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:456)
com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136)
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97)
nc.bs.framework.server.LoggerServletFilter.doFilter(LoggerServletFilter.java:35)
com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:928)
com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1025)
com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87)
com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:895)
com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195)
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:459)
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:526)
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:312)
com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:87)
com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1814)
发现大量时间在IO层面,排查了相关日志文件夹的大小,发现相关日志已经近90G。
需要紧急处理,否则录制SPR人过多会导致线程挂在后端,进而导致进程崩溃。
解决方案
停止NC服务后,删除nclogs文件夹。重启服务。