tianshan 发表于 2018-10-15 17:33:39

部署到生产环境,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)



===========================问题描述完毕,可在上班时段远程========================




admin 发表于 2018-10-15 17:57:28

说下你的jeecg版本号

admin 发表于 2018-10-15 17:57:53

还有这个半夜死锁,是不是有定时任务,看看业务代码那块有日志,卡在哪里

tianshan 发表于 2018-10-15 18:14:31

admin 发表于 2018-10-15 17:57 static/image/common/back.gif
说下你的jeecg版本号

我的版本是3.7.8

tianshan 发表于 2018-10-15 18:20:06

admin 发表于 2018-10-15 17:57 static/image/common/back.gif
还有这个半夜死锁,是不是有定时任务,看看业务代码那块有日志,卡在哪里 ...

死锁是很久以前出高并发时现过菜单死锁,早就解决了。这个不是死锁,每次cpu99%的时候,第一时间就去看日志,并没有什么报错。

admin 发表于 2018-10-15 18:43:03

那为什么到晚上就死?晚上没有作业?

tianshan 发表于 2018-10-16 09:18:25

admin 发表于 2018-10-15 18:43 static/image/common/back.gif
那为什么到晚上就死?晚上没有作业?

晚上也一直有人在使用,夜班的,系统时24小时都在有人使用的。

tianshan 发表于 2019-6-13 10:58:38

已自行解决

admin_jh9 发表于 2019-6-13 17:36:00

什么问题?
页: [1]
查看完整版本: 部署到生产环境,cpu总是99%