部署到生产环境,cpu总是99%
先介绍一下我这边的环境。windows服务器,16g内存,16核cpu。
平台做了一些修改:
整合redis,原使用spring与redis进行整合,做了session共享,发现经常有jedis连接池 time out的情况,后改成了tomcat与redis整合,用的是tomcat-redis-session-manager1.2.jar\com\orangefunction\tomcat\redissessions - ZIP 压缩文件, 解包大小为 42,701 字节。
这边部署了nginx,一台主,一台备,发布新版本的时候,主备调换防止用户不能使用。
cpu99%的情况大多出现在每次切换服务的时候。
但也有少部分情况,没有做任何操作,半夜的时候cpu就99%。
这次抓到cpu到88%的时候,立即使用nginx进行了切换,才有可操作的余地。
虽然该服务器已经没有任何请求,但cpu仍一直是88%,截至目前为止已持续了1个多小时。
=========================情况介绍完毕====================================
使用jdk自带的visualVM查看了当前正在运行的线程,如下。
使用jdk自带的visualVM抓取了dump文件,找到一个状态为RUNNABLE的线程,如下。
注意到图中的 at org.tlmpframework.core.util.ContextHolderUtils.getSession(ContextHolderUtils.java:46) at org.tlmpframework.core.interceptors.AuthInterceptor.preHandle(AuthInterceptor.java:134)
这两条信息,于是去代码里寻找原因,未果。寻求帮助。
可以看到图中的"catalina-exec-56" 在图一中,已经运行了400万毫秒,也就是1小时6分钟。
除了56,还有其他图中绿色的状态为RUNNABLE的线程,信息都是一样的。
56的完整dump信息如下:
"catalina-exec-56" daemon prio=6 tid=0x0000000018905800 nid=0x13ac runnable
java.lang.Thread.State: RUNNABLE
at java.util.HashMap.put(HashMap.java:494)
at org.tlmpframework.core.util.ContextHolderUtils.getSession(ContextHolderUtils.java:46)
at org.tlmpframework.core.interceptors.AuthInterceptor.preHandle(AuthInterceptor.java:134)
at org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:134)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:932)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.tlmpframework.filter.ResouceEncodingFilter.doFilter(ResouceEncodingFilter.java:182)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:150)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
at com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve.invoke(RedisSessionHandlerValve.java:22)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2555)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2544)
- locked <0x00000006864c4630> (a org.apache.tomcat.util.net.AprEndpoint$AprSocketWrapper)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Locked ownable synchronizers:
- <0x000000069c7a5098> (a java.util.concurrent.ThreadPoolExecutor$Worker)
===========================问题描述完毕,可在上班时段远程========================
说下你的jeecg版本号 还有这个半夜死锁,是不是有定时任务,看看业务代码那块有日志,卡在哪里 admin 发表于 2018-10-15 17:57 static/image/common/back.gif
说下你的jeecg版本号
我的版本是3.7.8 admin 发表于 2018-10-15 17:57 static/image/common/back.gif
还有这个半夜死锁,是不是有定时任务,看看业务代码那块有日志,卡在哪里 ...
死锁是很久以前出高并发时现过菜单死锁,早就解决了。这个不是死锁,每次cpu99%的时候,第一时间就去看日志,并没有什么报错。 那为什么到晚上就死?晚上没有作业? admin 发表于 2018-10-15 18:43 static/image/common/back.gif
那为什么到晚上就死?晚上没有作业?
晚上也一直有人在使用,夜班的,系统时24小时都在有人使用的。 已自行解决 什么问题?
页:
[1]