问题描述:

现象一. 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卡卡卡相关推荐

  1. 移动apn接入点哪个快_51物联卡:使用物联网卡时为什么总要让你设置APN?

    近日,有不少朋友都在咨询51物联卡(http://www.iwulianka.com)小编,说为什么手机安装了物联网卡不能正常使用,在网上查询说要设置APN,这种到底是什么情况?针对这一咨询比较多的问 ...

  2. 如何区分电梯卡为id卡ic卡_电梯ic卡系统与ID卡系统有什么区别

    电梯 ic 卡系统与 ID 卡系统有什么区别 现在很多地方乘坐电梯都需要刷卡,要不是刷卡进去乘坐电梯,就是进去电梯内刷卡. 很多人不清楚那个卡片属于什么类型.有些地方用 ic 卡有些地方用 ID 卡, ...

  3. 欧贝通和工行e卡(虚拟visa卡)

    一般godaddy推出1美元注册域名的神码的时候,就会有大量的人利用虚拟visa卡进行注册,这种虚拟的visa卡类似储蓄卡,可以通过工行e卡将钱充值进去,然后进行消费. 欧贝通(entropay)虚拟 ...

  4. 普通门禁卡及各类复制卡相关知识

    转自: https://nfctool.cn/42 本文带你了解M1卡的数据结构,为以后的破解提供理论基础.同时带你了解各种IC卡,让你对破解和复制有更清晰的目标.请注意,ID卡没有密码,一读一写即可 ...

  5. 51物联卡:使用物联网卡时为什么总要让你设置APN?

    近日,有不少朋友都在咨询51物联卡小编,说为什么手机安装了物联网卡不能正常使用,在网上查询说要设置APN,这种到底是什么情况?针对这一咨询比较多的问题,小编给大家絮叨一下,为什么你的手机在使用物联网卡 ...

  6. 三星android sd卡,神乎其技:大神让三星S7 Edge同时用上SD卡和双SIM卡

    IT之家讯 3月22日消息 三星在今年的S7/S7 Edge手机上增加了支持microSD卡扩展的功能,对于那些手机重度用户而言无疑是一项福音,不过三星S7的microSD卡功能有个尴尬的地方,就是和 ...

  7. stm32 led屏控制卡_LED显示屏控制卡解析

    LED显示屏控制卡是LED图文显示屏的核心部件,负责接收来自计算机串行口的画面显示信息,置入帧存储器,按分区驱动方式生成天津LED显示屏所需的串行显示数据和扫描控制时序.LED显示屏画面的效果与它有关 ...

  8. 信用评分卡—信贷准入A卡(逻辑回归)

    信贷评分卡 前言 1.逻辑回归原理 1.1 求解方式 1.2 逻辑回归为什么用sigmoid并且转化后的输出即为1的概率 2.逻辑回归到评分卡 2.1 woe及IV 2.2 逻辑回归到评分卡 2.3 ...

  9. cuid卡写入后锁死_荣耀手机NFC升级了:公交、门禁、支付、饭卡、加密卡还能写卡...

    2019年双十一期间,入手了荣耀magic2手机,其实去年用过一次,今年换了多次还是特别喜欢,主要是麒麟980旗舰CPU,全面滑屏特有面子. 入手的第一时间,自己就启用了手机的钱包功能,手机钱包除了小 ...

  10. [vue-element]ElementUI的穿梭组件如果数据量大会变卡怎么解决不卡的问题呢?

    [vue-element]ElementUI的穿梭组件如果数据量大会变卡怎么解决不卡的问题呢? 在 left-footer 的 slot 里面加个翻页组件, 并修改 filter-method 方法重 ...

最新文章

  1. js实现双击后网页自己主动跑-------Day55
  2. 基于微信的图片放大预览
  3. CF 6 A. Triangle
  4. sublime3 常用功能总结
  5. Bean context must contain FilterChainProxy
  6. 80后屌丝站长自曝日赚6000(纯分享贴)
  7. keepalived配置参数官方文档中文翻译版
  8. oracle查询耗资源的进程,常用Oracle进程资源查询语句(运维必看)
  9. LA 4794 状态DP+子集枚举
  10. WordPress W3 Super Cache插件远程PHP代码执行漏洞
  11. 超标量处理器设计 姚永斌 前言 摘录
  12. 20行代码实现(UartLogger)串口监控记录器
  13. GD32实战14__RTC
  14. 投资理财--动态市盈率静态市盈率 整理
  15. 简单点的java_简单点,学习的方式简单点,java零基础入门语法教学(简单篇)...
  16. vue视频播放插件vue-video-player
  17. 在x86和arm混合部署架构下排查TiKV节点内存占用极高的问题
  18. 破解网页文字无法复制的方法
  19. MathType7安装使用及please restart word to load mathtype addin properly的问题。
  20. 【kindle资源】一本不得不读的投资经典《唐朝-手把手教你读财报》

热门文章

  1. 苹果手机回收价格怎么查询
  2. 亚马逊智能音箱无故发出笑声,多名用户被吓尿
  3. Maya---基础知识总结
  4. asp.net使用MailMessage发送邮件的方法
  5. 刘宇凡:我是一只特立独行的猪
  6. _VMware_虚拟机到_KVM
  7. Mac解决Updating Homebrew卡顿
  8. 教育行业运维审计用什么堡垒机好?有什么作用?
  9. win7取消计算机密码怎么设置,win7开机密码怎么取消
  10. 程序员如何庆祝十一:用Python绘制红色的中国地图