TongWeb卡、TongWeb卡、TongWeb卡卡卡
问题描述:
现象一. TongWeb启动时卡住了起不来、启动慢。
现象二:TongWeb部署应用时卡在70%不动了。
现象三:TongWeb访问量大时,CPU也不高,JVM内存也够,但就是慢。
现象四:执行stopserver.sh无效,停不下来TongWeb。
问题原因:
多数是由于TongWeb中的应用阻塞导致的。
解决办法:
一定要善用JDK的jstack命令,这是一个分析Java线程的常用命令。
一定要在当前进程卡或慢时执行如下操作,注意:过了这村就没这店了。千万不要重启TongWeb后再操作,此时已无效。
1. 执行: jstack <PID> > tongweb.log 把线程栈输出到文件中分析。注: <PID>替为TongWeb的进程号,千万别直接输<PID>。
2. 极端情况 Java进程反应不过来,执行jstack无效或没装JDK,没有jstack命令。 这时可以执行 :kill -3 <PID> ,日志输出在TongWeb的logs/jvm.log中。 注:kill -3不是杀进程。注意保存jvm.log,重启TongWeb后该文件重写。生成文件后重点看BLOCKED或WAITING线程,间隔几秒多执行几次jstack,若看到BLOCKED或WAITING在同一位置,多个线程锁在同一个地址则可能是这里的原因。
重点查看线程:
1. 如果是应用运行过程中存在线程问题,多关注以端口类型和端口号命名的线程池,如:"http-nio-8088-exec-342"
"http-nio-8088-exec-342" #3049 daemon prio=5 os_prio=0 tid=0x00007f539006f800 nid=0x48da runnable [0x00007f537d4af000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:101)
at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:144)
at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:174)
- locked <0x00000006c4718ab8> (a com.mysql.jdbc.util.ReadAheadInputStream)
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3011)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3472)
2. 如果是通过控制台部署应用卡,则多关注以控制台端口命名的线程池,且含有deploy关键字的线程,如:"http-nio2-9060-exec-9060-63"。部署卡到70%常见的主要情况为:应用采用开源数据源,但没有配连接超时参数,在部署应用、大并发时获取到不连接,一直卡在获取数据库连接上。
"http-nio2-9060-exec-63" #104 daemon prio=10 os_prio=0 tid=0x0000007ec007c800 nid=0x700e waiting for monitor entry [0x0000007deebfb000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294)
- waiting to lock <0x00000006830e72c8> (a org.apache.commons.dbcp.PoolableConnectionFactory)
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1148)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:882)
3. 如果是TongWeb启动慢,则重点看main主线程即可。
"main" #1 prio=5 os_prio=0 tid=0x0000ffffb404f000 nid=0x7486 runnable [0x0000ffffbba2b000]
java.lang.Thread.State: RUNNABLE
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323)
at java.net.InetAddress.getLocalHost(InetAddress.java:1500)
- locked <0x00000005c008eb50> (a java.lang.Object)
at dm.jdbc.dbaccess.DbPureAccess.isLocalHost(DbPureAccess.java:220)
4. 要善于利用文本工具Notepad++等的统计功能,查看多个线程是否BLOCKED或WAITING在同一地址。注意:(1). 多线程锁在同一地址的才有问题。(2). 偶尔一、两个BLOCKED或WAITING不是问题。(3).千万别一看到locked就认为有问题。
如上图是一个典型的数据源满在等数据源连接的一个性能问题。 而如下则没有问题,只是http线程池的空闲等待。
"http-nio2-8088-exec-3" #32 daemon prio=5 os_prio=0 tid=0x000000001bf2a000 nid=0x2198 waiting on condition [0x0000000022dbe000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x0000000080c5a5d8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:103)
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:31)
at com.tongweb.web.util.threads.TWThreadPoolExecutor.getTask(TWThreadPoolExecutor.java:1094)
at com.tongweb.web.util.threads.TWThreadPoolExecutor.runWorker(TWThreadPoolExecutor.java:1156)
at com.tongweb.web.util.threads.TWThreadPoolExecutor$Worker.run(TWThreadPoolExecutor.java:628)
at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
另外推荐一个show-busy-java-threads.sh脚本,可以分析每个线程占用的CPU。
https://github.com/oldratlee/useful-scripts/blob/master/docs/java.md#beer-show-busy-java-threadssh
TongWeb卡、TongWeb卡、TongWeb卡卡卡相关推荐
- 移动apn接入点哪个快_51物联卡:使用物联网卡时为什么总要让你设置APN?
近日,有不少朋友都在咨询51物联卡(http://www.iwulianka.com)小编,说为什么手机安装了物联网卡不能正常使用,在网上查询说要设置APN,这种到底是什么情况?针对这一咨询比较多的问 ...
- 如何区分电梯卡为id卡ic卡_电梯ic卡系统与ID卡系统有什么区别
电梯 ic 卡系统与 ID 卡系统有什么区别 现在很多地方乘坐电梯都需要刷卡,要不是刷卡进去乘坐电梯,就是进去电梯内刷卡. 很多人不清楚那个卡片属于什么类型.有些地方用 ic 卡有些地方用 ID 卡, ...
- 欧贝通和工行e卡(虚拟visa卡)
一般godaddy推出1美元注册域名的神码的时候,就会有大量的人利用虚拟visa卡进行注册,这种虚拟的visa卡类似储蓄卡,可以通过工行e卡将钱充值进去,然后进行消费. 欧贝通(entropay)虚拟 ...
- 普通门禁卡及各类复制卡相关知识
转自: https://nfctool.cn/42 本文带你了解M1卡的数据结构,为以后的破解提供理论基础.同时带你了解各种IC卡,让你对破解和复制有更清晰的目标.请注意,ID卡没有密码,一读一写即可 ...
- 51物联卡:使用物联网卡时为什么总要让你设置APN?
近日,有不少朋友都在咨询51物联卡小编,说为什么手机安装了物联网卡不能正常使用,在网上查询说要设置APN,这种到底是什么情况?针对这一咨询比较多的问题,小编给大家絮叨一下,为什么你的手机在使用物联网卡 ...
- 三星android sd卡,神乎其技:大神让三星S7 Edge同时用上SD卡和双SIM卡
IT之家讯 3月22日消息 三星在今年的S7/S7 Edge手机上增加了支持microSD卡扩展的功能,对于那些手机重度用户而言无疑是一项福音,不过三星S7的microSD卡功能有个尴尬的地方,就是和 ...
- stm32 led屏控制卡_LED显示屏控制卡解析
LED显示屏控制卡是LED图文显示屏的核心部件,负责接收来自计算机串行口的画面显示信息,置入帧存储器,按分区驱动方式生成天津LED显示屏所需的串行显示数据和扫描控制时序.LED显示屏画面的效果与它有关 ...
- 信用评分卡—信贷准入A卡(逻辑回归)
信贷评分卡 前言 1.逻辑回归原理 1.1 求解方式 1.2 逻辑回归为什么用sigmoid并且转化后的输出即为1的概率 2.逻辑回归到评分卡 2.1 woe及IV 2.2 逻辑回归到评分卡 2.3 ...
- cuid卡写入后锁死_荣耀手机NFC升级了:公交、门禁、支付、饭卡、加密卡还能写卡...
2019年双十一期间,入手了荣耀magic2手机,其实去年用过一次,今年换了多次还是特别喜欢,主要是麒麟980旗舰CPU,全面滑屏特有面子. 入手的第一时间,自己就启用了手机的钱包功能,手机钱包除了小 ...
- [vue-element]ElementUI的穿梭组件如果数据量大会变卡怎么解决不卡的问题呢?
[vue-element]ElementUI的穿梭组件如果数据量大会变卡怎么解决不卡的问题呢? 在 left-footer 的 slot 里面加个翻页组件, 并修改 filter-method 方法重 ...
最新文章
- js实现双击后网页自己主动跑-------Day55
- 基于微信的图片放大预览
- CF 6 A. Triangle
- sublime3 常用功能总结
- Bean context must contain FilterChainProxy
- 80后屌丝站长自曝日赚6000(纯分享贴)
- keepalived配置参数官方文档中文翻译版
- oracle查询耗资源的进程,常用Oracle进程资源查询语句(运维必看)
- LA 4794 状态DP+子集枚举
- WordPress W3 Super Cache插件远程PHP代码执行漏洞
- 超标量处理器设计 姚永斌 前言 摘录
- 20行代码实现(UartLogger)串口监控记录器
- GD32实战14__RTC
- 投资理财--动态市盈率静态市盈率 整理
- 简单点的java_简单点,学习的方式简单点,java零基础入门语法教学(简单篇)...
- vue视频播放插件vue-video-player
- 在x86和arm混合部署架构下排查TiKV节点内存占用极高的问题
- 破解网页文字无法复制的方法
- MathType7安装使用及please restart word to load mathtype addin properly的问题。
- 【kindle资源】一本不得不读的投资经典《唐朝-手把手教你读财报》