技术文章 - CS247546
如何处理 Windchill 中的线程安全问题
已修改: 09-May-2023
适用于
- Windchill PDMLink 6.2 to 12.1
说明
- 什么是线程安全问题(也称为并发问题或竞争条件)
- 在 Windchill 系统上观察到高且持续的 CPU 使用率
- 观察到一个或多个线程在访问非线程安全的对象(例如 HashMap、
- 查看从 Windchill 捕获的线程转储,可以使用以下规则发现挂起的线程
- 堆栈跟踪显示代码当前正在访问非线程安全对象(例如 HashMap、HashSet、ArrayList)
- CPU 用户时间增加自上次状态以来花费的时间量(即 100% 的 1 个 CPU 或更少,如果此数量的 CPU 资源不可用)
- 字节分配值不随时间变化
- 操作永远不会完成
- 下面是一个示例,显示了通过捕获 2 个后续线程转储可见的一次典型问题的演变
- 第一个线程转储的提取显示 HashMap.getEntry 中有问题的线程:
“ajp-bio-8011-exec-6”Id=129 daemon prio=5 RUNNABLE
阻止(cnt):35714;等待 (cnt): 32780
CPU 纳米:256245725053586;用户纳米:254639820000000;分配的字节数:558960941120
Servlet 请求:10gd6vh;ihca5tzc;16546;ov2qsw;3024310;方法上下文:10gd6vh;ihca5tzc;16546;ov2qsw;3024313
在 java.util.HashMap.getEntry(HashMap.java:469)
在 java.util.HashMap.containsKey(HashMap.java:453)
在 com.ptc.wvs.server.loader.PartGenericStructure.getNextSiblingNumber(PartGenericStructure.java:2138)
阻止(cnt):35714;等待 (cnt): 32780
CPU 纳米:256245725053586;用户纳米:254639820000000;分配的字节数:558960941120
Servlet 请求:10gd6vh;ihca5tzc;16546;ov2qsw;3024310;方法上下文:10gd6vh;ihca5tzc;16546;ov2qsw;3024313
在 java.util.HashMap.getEntry(HashMap.java:469)
在 java.util.HashMap.containsKey(HashMap.java:453)
在 com.ptc.wvs.server.loader.PartGenericStructure.getNextSiblingNumber(PartGenericStructure.java:2138)
- 第二个线程转储的提取物显示有问题的线程仍在对 HashMap.getEntry 的调用中。仅观察 CPU nanos / User nanos 在增加。分配的字节没有变化。由于它使用 100% CPU,因此时间通常会增加 2 个线程转储之间经过的时间量。
“ajp-bio-8011-exec-6”Id=129 daemon prio=5 RUNNABLE
阻止(cnt):35714;等待 (cnt): 32780
CPU 纳米:256257725053586;用户纳米:254651820000000;分配的字节数:558960941120
Servlet 请求:10gd6vh;ihca5tzc;16546;ov2qsw;3024310;方法上下文:10gd6vh;ihca5tzc;16546;ov2qsw;3024313
在 java.util.HashMap.getEntry(HashMap.java:469)
在 java.util.HashMap.containsKey(HashMap.java:453)
在 com.ptc.wvs.server.loader.PartGenericStructure.getNextSiblingNumber(PartGenericStructure.java:2138)
阻止(cnt):35714;等待 (cnt): 32780
CPU 纳米:256257725053586;用户纳米:254651820000000;分配的字节数:558960941120
Servlet 请求:10gd6vh;ihca5tzc;16546;ov2qsw;3024310;方法上下文:10gd6vh;ihca5tzc;16546;ov2qsw;3024313
在 java.util.HashMap.getEntry(HashMap.java:469)
在 java.util.HashMap.containsKey(HashMap.java:453)
在 com.ptc.wvs.server.loader.PartGenericStructure.getNextSiblingNumber(PartGenericStructure.java:2138)
这是文章 247546 的 PDF 版本,可能已过期。最新版本 CS247546