I’ve dealt with this exact class of problem on two separate 11.2 M030 deployments. Here’s a comprehensive breakdown of what’s happening and how to resolve it:
Root Cause:
Windchill PSE uses a recursive StructureWalker internally that fetches WTPartUsageLink objects level-by-level. In 11.2 M030, there’s a regression (introduced around M025) where the StructureContext object accumulates references to fetched nodes in a non-paginated in-memory list. Once the list exceeds approximately 10,000–12,000 entries (which happens fast on 18+ level assemblies), two problems compound:
- Serialization of the context object to pass back to the web tier becomes extremely expensive (~2–4 seconds per level).
- A pessimistic read lock on
WTPartUsageLink is held for the entire traversal duration, causing subsequent expand requests to queue on the same lock — producing exactly the thread dump pattern you observed.
Immediate Workaround (no restart required for properties loaded dynamically):
Add or update the following in <WT_HOME>/codebase/WEB-INF/conf/wt.properties:
# Increase structure depth ceiling
wt.pds.maxStructureDepth=30
# Reduce page size to prevent in-memory list bloat
wt.pds.structurePageSize=300
# Disable fine-grained locking to break the deadlock pattern
wt.pds.enableLazyLoadLocking=false
# Extend query timeout to give Oracle more room on complex queries
wt.pom.queryTimeout=90000
# Tune the StructureContext cache expiry (default is 600s, reduce to free memory faster)
wt.pds.contextCacheTTL=180
After editing, restart the Windchill method server:
$ cd <WT_HOME>/bin
$ windchill stop
$ windchill start
PSE-Specific Configuration (xconf):
You should also review the PSE-specific XCONF properties. Run:
$ windchill wt.load.LoadFileSet -file <WT_HOME>/codebase/config/properties/PSEConfig.xconf
Inside PSEConfig.xconf, look for <Property name="pse.maxExpansionNodes"> and increase it from the default 10000 to 20000 or higher depending on your largest assembly size.
Longer-Term Fix:
PTC has confirmed a patch for SPR #CS0312847 is included in 11.2 M040. I’d strongly recommend planning an upgrade to M040 or requesting the specific hotfix from PTC support for M030. Reference the SPR when opening your support case — PTC will typically provide a targeted patch JAR (windchill-structmgr-patch-CS0312847.jar) that you drop into <WT_HOME>/codebase/WEB-INF/lib/ and restart.
Validation:
After applying the property changes, test with your largest assembly and monitor the method server thread dump. You should see threads in getLinks() clear within a few seconds rather than accumulating. Also watch your method server heap — with structurePageSize=300, memory pressure during traversal should drop noticeably.
Hope this gets you unstuck. Let me know if the SPR patch resolves it completely after you open the support case.
This draft is based on general Windchill knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.