【案例57】记一次类加载导致系统卡死

问题现象

顾问反馈系统卡顿,系统无法使用。所有节点打开都在转圈。

问题分析

排查了nmc,发现在master上有很多堵塞线程,都在做锁相关线程。

查看相关的线程信息发现是在做类加载。Master撑不住,需要把锁独立出来。

线程信息-1

java.io.WinNTFileSystem.getBooleanAttributes(Native Method)
java.io.File.exists(File.java:819)
sun.misc.URLClassPath$FileLoader.getResource(URLClassPath.java:1334)
sun.misc.URLClassPath.getResource(URLClassPath.java:249)
java.net.URLClassLoader$1.run(URLClassLoader.java:366)
java.net.URLClassLoader$1.run(URLClassLoader.java:363)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:362)
java.lang.ClassLoader.loadClass(ClassLoader.java:424)
java.lang.ClassLoader.loadClass(ClassLoader.java:357)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:348)
java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:686)
nc.bs.framework.comn.NetObjectInputStream$NCObjectInputStream.resolveClass(NetObjectInputStream.java:98)
... ...
java.io.ObjectInputStream.readArray(ObjectInputStream.java:1975)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
nc.bs.framework.common.InvocationInfo.readExternal(InvocationInfo.java:207)
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:2118)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
nc.bs.framework.comn.NetObjectInputStream.readObjectOverride(NetObjectInputStream.java:277)
... ...

线程信息-2

java.util.zip.ZipFile.getEntry(Native Method)
java.util.zip.ZipFile.getEntry(ZipFile.java:316)
java.util.jar.JarFile.getEntry(JarFile.java:240)
java.util.jar.JarFile.getJarEntry(JarFile.java:223)
sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:1054)
sun.misc.URLClassPath.getResource(URLClassPath.java:249)
java.net.URLClassLoader$1.run(URLClassLoader.java:366)
java.net.URLClassLoader$1.run(URLClassLoader.java:363)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:362)
java.lang.ClassLoader.loadClass(ClassLoader.java:424)
java.lang.ClassLoader.loadClass(ClassLoader.java:357)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:348)
java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:686)
nc.bs.framework.comn.NetObjectInputStream$NCObjectInputStream.resolveClass(NetObjectInputStream.java:98)
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1868)
java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
java.io.ObjectInputStream.readClass(ObjectInputStream.java:1716)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1556)
java.io.ObjectInputStream.readArray(ObjectInputStream.java:1975)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
nc.bs.framework.common.InvocationInfo.readExternal(InvocationInfo.java:207)
... ...

Master请求是每秒1000多

解决方案

由于项目使用了Npart,通过Npart搭建了独立的PK锁服务器

后续问题

但是搭建完成后发现采购订单维护点击删除,发现报错如图。

排查相关数据库锁、PK锁都为空。

但是NMC中可以看到相关线程都存在PKlockServer的进程,说明已经创建了独立的PK锁。

排查相关线程发现有PK锁相关线程

导致的单据加锁。

删除单独的锁服务器,恢复master解锁后,单子可以删除。经过排查发现,在单独访问主机的server,直接做相关单子无异常现象。

单独访问从机上的服务做相同单据,显示被锁,nmc中也有相关线程出现。怀疑从机到主机PK锁服务网络不通导致PK锁服务未接收到相关请求的原因造成的。

查看服务防火墙发现端口未开放。开放相关PK锁服务的端口后,问题解决。

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值