关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、418799587 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 18045|回复: 8

[系统权限] 部署到生产环境,cpu总是99%

[复制链接]
发表于 2018-10-15 17:33:39 | 显示全部楼层 |阅读模式
先介绍一下我这边的环境。
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 [0x000000001e5dd000]
   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)



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




发表于 2018-10-15 17:57:28 | 显示全部楼层
说下你的jeecg版本号
发表于 2018-10-15 17:57:53 | 显示全部楼层
还有这个半夜死锁,是不是有定时任务,看看业务代码那块有日志,卡在哪里
 楼主| 发表于 2018-10-15 18:14:31 | 显示全部楼层
admin 发表于 2018-10-15 17:57
说下你的jeecg版本号

我的版本是3.7.8
 楼主| 发表于 2018-10-15 18:20:06 | 显示全部楼层
admin 发表于 2018-10-15 17:57
还有这个半夜死锁,是不是有定时任务,看看业务代码那块有日志,卡在哪里 ...

死锁是很久以前出高并发时现过菜单死锁,早就解决了。这个不是死锁,每次cpu99%的时候,第一时间就去看日志,并没有什么报错。
发表于 2018-10-15 18:43:03 | 显示全部楼层
那为什么到晚上就死?晚上没有作业?
 楼主| 发表于 2018-10-16 09:18:25 | 显示全部楼层
admin 发表于 2018-10-15 18:43
那为什么到晚上就死?晚上没有作业?

晚上也一直有人在使用,夜班的,系统时24小时都在有人使用的。
 楼主| 发表于 2019-6-13 10:58:38 | 显示全部楼层
已自行解决
发表于 2019-6-13 17:36:00 | 显示全部楼层
什么问题?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表