configureWindchill
configureWindchill 目标的运行可分为以下步骤:
1. 记录所用的初始设置,并将所用的 XCONF 文件备份
2. 确定系统内存和 CPU
3. 计算内存区域
4. 计算最佳服务器管理器和方法服务器配置
5. 设置附加的服务器管理器和方法服务器选项
6. 设置 Windchill 缓存特性值
7. 设置数据库特性值
8. 在交互模式下运行时,移除终端窗口并配置从 JMX 客户端进行的远程访问和无用单元收集诱发
在上述每个步骤中,Assistant 都会通过执行内部目标来完成特定任务。Assistant 执行这些目标时,输出中会显示相关目标名称。
内部目标的默认值保存在 <Windchill>/utilities/wca/Configurator.properties 文件中。由于默认值表示发布时提供的最新最佳方法值,因此随着相关可用数据的增加,PTC 可能对这些值进行更新。请不要依赖此处提供的发布内容,因为这些内容与默认值相关。要验证使用 Windchill Configuration Assistant 之前默认值是多少,您可以检查此文件。
以下各节所示的示例输出不是为了提供与任何给定系统配置相关的准确数据,而是用于说明与本讨论相关的示例。
记录 Windchill Configuration Assistant 运行的初始设置
Windchill Configuration Assistant 会在运行时记录初始化信息,具体包括以下内容:
• Windchill Configuration Assistant 和 ANT 版本 (initWCAVersion)
• Windchill 使用的 Java 版本 (initWindchillJavaVersion)
• Windchill 版本 (initWindchillVersion)
备份现有的 windchillconfigurator.xconf 文件
在进行任何更改之前,Windchill Configuration Assistant 将备份现有的 wind hillconfigurator.xconf 文件,如 backupXconfFile 中所示。
确定系统内存和 CPU
运行 configureWindchill 目标时,Windchill Configuration Assistant 执行的第一步是确定操作系统特征、总内存、空闲内存以及系统中可用的 CPU 数量。
在 Assistant 初始化期间,将使用 init 目标报告类似于如下内容的服务器度量值:
[echo] Number of CPUs detected: 8
[echo] Physical Memory: 12285 MB
[echo] Free Memory: 8473 MB
[echo] Maximum Java heap size=8000 MB
[echo] WT_HOME=D:\PTC\Windchill
[echo] VmVendor=Oracle Corporation
[echo] Operating System=Windows 7
[echo] OS Arch=amd64
将内存分配给 Windchill 之前,Assistant 先确定可用的内存大小。服务器度量值 (前面所述) 标识了系统中安装的总内存以及空闲内存大小。
为了避免向 Windchill 过度分配内存,Assistant 会为操作系统保留 20% 的物理内存。分配给操作系统的内存百分比由特性 percentPhysicalMemoryReservedForOS 控制。Assistant 还会查找 RDBMS 和 LDAP 服务器的位置。如果其中任一台服务器配置为与 Windchill 运行于同一主机上,则 Assistant 将进一步减小对 Windchill 可用的空闲内存量。
为协助确定内存分配,Assistant 将调用 allocatePhysmem 目标。使用此目标在交互模式下运行时提供的提示可用于:
• 指定要分配的内存百分比。
• 选取是否依据总物理内存或空闲内存确定整个 Windchill 内存需求量的大小。
• 如果选择了空闲内存,则可以输入空闲内存量 (RAM) 来覆盖计算的值
默认值指定 Assistant 在其计算过程中使用空闲内存和 80%。因此,应在运行该步骤前停止 Windchill。您还应停止正运行于该服务器上且不应与 Windchill 一起运行的任何其他应用程序。
percentMemoryRegionReservedForWindchill 特性控制着可供 Windchill 使用的内存百分比。默认值为 80。如前所述,通过编辑 Configurator.properties 文件中的值可以更改默认值。
在以下示例中,系统报告的空闲内存为 8125 MB。基于 80% 的默认值,Assistant 将 6500 MB 内存分配给 Windchill:
allocatePhysMem:
[input] Percent of physical memory to reserve for Operating System [20]
[echo] OS memory requirement=2457 MB
[echo] Minimum memory requirement for MethodServer: 768 MB
[echo] Minimum memory requirement for ServerManager: 144 MB
[echo] Windchill Requires a minimum of 912 MB
[echo] Total Memory requirement: 3369.0 MB
[input] Allocate Windchill Memory region from total (12285 MB) or free (8473 MB) physical memory ([free], total)
[echo] Allocating Windchill Memory region from free memory
[input] Enter % of free RAM (8473 MB) to allocate to Windchill: [80]
[echo] % free memory allocated to Windchill: 80
[echo] Windchill Memory Region= 6778 MB
计算内存区域
在接下来的这一步骤中,Assistant 将分配的内存分成两个区域。这两个区域用于方法服务器和服务器管理器。Assistant 使用百分比计算这两个内存区域的大小。默认分配如下:
• 服务器管理器:10%
• 方法服务器:90%
在交互模式下运行 Windchill Configuration Assistant 时,可通过编辑 Configurator.properties 文件或输入新值来更改服务器管理器分配百分比。剩余内存用于方法服务器。
以下示例采用的是默认值并显示了最终内存分配:
[input] Enter % of Windchill Memory (6778) to allocate to ServerManager Heap: [10]
[echo] % Windchill memory to allocate to ServerManager: 10
[echo] ServerManager memory region..... 677 MB
[echo] MethodServer memory region..... 6100 MB
计算最佳服务器管理器和方法服务器配置
计算出内存区域大小后,Assistant 将确定要配置的方法服务器数量。为此,要同时考虑方法服务器内存区域的大小和 CPU 数量。
configureMethodServerService 目标依据操作系统报告的 CPU 数量来计算方法服务器和后台方法服务器的数量。然后使用包含 Configurator.properties 中所定义 CPU 与方法服务器数量比率的查找表,确定适用于指定 CPU 数量的最佳方法服务器数量。还有一个查找表用于依据操作系统和方法服务器的内存区域大小来确定方法服务器的最佳数量。如果建议使用多个方法服务器但未采用交互模式运行,则其中一个方法服务器会配置为后台方法服务器。所有其他方法服务器则配置为前台方法服务器。如果在交互模式下运行且 Assistant 找到足够的资源运行多个方法服务器,系统可能提示您配置一个后台方法服务器。如果不想配置后台方法服务器,则在出现提示时输入 n。
如果 Assistant 确定当前 Windchill 安装属于某个集群,则仅允许在配置为集群主服务器的主机上配置一个后台方法服务器。
如果想要配置多个后台方法服务器,必须手动配置其他后台方法服务器。有关配置多个后台方法服务器的详细信息,请参阅
配置后台方法服务器。
在以下示例中,Assistant 为 8 个 CPU 的服务器推荐使用 3 个方法服务器并允许配置一个后台方法服务器:
configureMethodServerService:
[echo] Recommended number of MethodServers for 8 CPUs = 3
[echo] set outputProperty to default =3
[echo] Recommended number of MethodServers for 6100MB on Windows 7 (64bit) is 3
[echo] Recommended number of MethodServers based on available resources=3
[input] Enter number of MethodServers to configure (current=1): [3]
[input] Enter MethodServer max heap size (MB): [2033]
[echo] Setting max heap size for MethodServer to 2033
[input] Enter MethodServer initial heap size (MB): [2033]
[echo] Setting initial heap size for MethodServer to 2033
[input] Do you want to configure a BackgroundMethodServer (y/n)? ([y], n)
[echo] Configuring Background MethodServer
Assistant 配置一个后台方法服务器时,将指定其中一个前台方法服务器作为后台方法服务器,并将前台方法服务器的数量减一。方法服务器 (包括后台方法服务器 - 如果存在) 的内存从方法服务器内存区域中分配。
所有方法服务器 (包括后台方法服务器) 都被分配相同的 Java 堆大小。堆大小通过用方法服务器堆区域除以后台和前台方法服务器之和来计算。计算所得的堆大小不得超过为操作系统和内存模型 (例如,32 位或 64 位) 定义的堆大小限值。在以上示例中,为前台方法服务器和后台方法服务器分配的堆大小均为 2033 MB。
接下来,设置服务器管理器的堆阵。您可以通过交互方式使用显示的默认值 (即在 allocatePhysMem 下计算的服务器管理器内存区域) 或输入您自己的值。以下示例说明了默认值的使用方法:
configureServerManager:
[input] Enter ServerManager max heap size (MB): [812]
[echo] Setting max heap size for ServerManager to 812
[input] Enter ServerManager initial heap size (MB): [812]
[echo] Setting initial heap size for ServerManager to 812
在完成对方法服务器数目以及方法服务器和服务器管理器堆阵的设置后,Assistant 将对其他 Java 命令行选项进行配置。这些命令行选项用于精调最大垃圾收集吞吐量的堆生成大小,其中包括并行线程的数量。
Windchill 所用的 Java 收集器使用多个 CPU 以缩短完整垃圾收集的暂停时间。Windchill 在单个系统上使用多个 JVM。可以使用助手程序来调优垃圾收集,具体做法是指定同时用于方法服务器和服务器管理器上垃圾收集的并行线程数目。助手程序会确定默认值,并在运行时显示这些值。在以下示例中,助手程序建议每个方法服务器使用两个线程:
[echo] Calculated ParallelGCThreads=2
[input] Enter MethodServer parallel GC threads: [2]
在以下示例中,助手程序建议每个服务器管理器使用两个线程:
[echo] Calculated ParallelGCThreads=2
[input] Enter ServerManager parallel GC threads: [2]
设置 Windchill 缓存特性值
Assistant 将在 Windchill 应用程序特性中设置缓存设置。首先考虑一组用于评估内存中数据缓存大小的特性。
如果系统不是欠载运行,很难调整最佳缓存。Windchill Configuration Assistant 只是依据数据库特定表中找到的行数建议初始缓存大小。
配置的 Windchill 缓存特性如下:
wt.admin.cache.maxDomains
wt.cache.size.AclCache
wt.cache.size.EnumerationDefinitionCache
wt.cache.size.IBADefViewManager$IBADefViewCache
wt.cache.size.IndexListCache
wt.cache.size.PagingSessionCache
wt.cache.size.PolicyAcl
wt.cache.size.PreferenceCache
wt.cache.size.RoleAccessCache
wt.cache.size.SessionCache
wt.cache.size.StandardFederatedServerHelper$RemoteObjectIdCache
wt.cache.size.StandardFvService$ActiveFolderCache
wt.cache.size.StandardUfidSrvService$RemoteObjectIdCache
wt.cache.size.StructEnumAttTemplateCache
wt.cache.size.TypeDefinitionCache2
wt.cache.size.WTPrincipalCache
wt.services/rsc/default/ObjectReferenceCacheTable/ContainerCache.Size
wt.services/src/default/ObjectReferenceCacheTable/ContainerTeamCache
每个缓存包含多个条目,其中每个条目都有效地表示相应数据库表中的一行。应评估 Windchill 缓存的大小以仅保存最近访问的数据行 (也称为“工作集”)。
Assistant 使用两种基本算法来计算缓存大小。第一种缓存评估算法是获取数据库表中的总行数,然后依据表中总行数的可配置百分比确定缓存大小。
可配置百分比使用 Configurator.properties 中的以下特性进行定义:
WTContainer.cache.percent
ContainerTeam.cache.percent
WTPrincipal.cache.percent
PolicyAcl.cache.percent
RemoteObjectInfo.cache.percent
AdministrativeDomain.cache.percent
Session.cache.percent
RoleAccess.cache.percent
Preference.cache.percent
PagingSession.cache.percent
IBADefinition.cache.percent
EnumerationDefinitionCache.cache.percent
LWCStructEnumAttTemplate.cache.percent
LWCTypeDefinition.cache.percent
FvVault.cache.percent
IndexPolicyList.cache.percent
第二种缓存评估算法基于系统中定义的用户数量,以及应在工作负荷高峰期间同时执行 Windchill 请求的用户百分比。同时活动的所有用户所占的预测百分比由特性 peakActiveUsersPercent 控制,默认值为 10。
无论执行哪种算法,最终的缓存大小都是出厂设置大小和计算所得缓存大小中较大的那个。每个缓存都应用一个可配置的大小限值,以防止评估算法过度分配内存。以上所有缓存的最大大小都由特性 <CacheName>.cache.size.limit 控制,在 Configurator.properties 中进行定义。您可以在交互运行 Assistant 时将计算的值覆盖。例如,以下各行显示了设置会话缓存特性的行:
[echo] Named users: 100
[input] Estimated peak number of active users: [10]
[echo] Expected peak active users: 10
[echo] Configuring wt.cache.size.SessionCache currentSize=500 rowcount=100 percent=20
[input] Set Session Cache Size (max=2000): [500]
评估数据缓存之后,Assistant 会考虑用来配置数据库连接、JDBC 语句缓存大小等特性的各种特性。这些特性均位于 <Windchill>/utilities/wca/Windchill/db/db.properties 中。其中很多特性的初始值都非常适用于资源最低的环境,例如便携式计算机系统或小型台式计算机系统。在堆大小较大的服务器上配置 Windchill 时,应对这些特性做出相应调整。
如果要手动计算 WTPrincipalCache 大小,
请参阅本主题。
设置数据库特性值
Assistant 将根据方法服务器的堆阵来增大以下数据库的特性值。下表显示了基于不同堆大小的估计特性值 (推荐值可能有所不同,请参阅 Configurator.properties 文件获取所用的一组最新值):
特性名称
|
<1000 MB
|
1000 - 1999 MB
|
>=2000 MB
|
默认值
|
wt.pom.maxDbConnections
|
10
|
15
|
15
|
10
|
wt.pom.minDbConnections
|
5
|
5
|
5
|
5
|
wt.pom.refreshCache.size
|
100
|
200
|
300
|
100
|
wt.pom.rowPrefetchCount
|
20
|
20
|
20
|
20
|
wt.pom.statementCacheSize
|
50
|
50
|
50
|
50
|
Assistant 考虑的其他与数据库相关的特性不受内存或 CPU 资源约束。下表显示了这些特性:
特性名称
|
<1000 MB
|
1000 - 1999 MB
|
>=2000 MB
|
默认值
|
wt.pom.inClauseBindOptimizationCardinality
|
-1
|
-1
|
-1
|
-1
|
wt.pom.inClauseUseBindOptimization
|
true
|
true
|
true
|
true
|
wt.pom.oracle.disableAlwaysSemiJoin
|
false
|
false
|
false
|
false
|
交互模式配置选项
在交互模式下运行 configureWindchill 目标时,将提供以下各节中所述的附加配置选项。
移除终端窗口
配置数据库特性后,移除终端窗口时将进行检查。系统将显示以下提示:
[input] Do you want to remove the xterm/cmd terminal windows (y/n)? (y, [n])
默认值为不将其移除。输入 y 以命令 Assistant 将其移除。
配置从 JMX 客户端执行远程访问
Windchill Configuration Assistant 提示您配置服务器管理器,以便允许从 JMX 客户端 (如 JConsole) 执行远程访问。这些客户端可用于与 Windchill MBeans 进行交互,从而对该应用程序进行管理和监视。然而,要使用远程工作站中的 JMX 客户端连接,必须配置一些其他 Windchill 特性。
支持以下两种访问模式:
• 验证
配置验证远程访问时,Assistant 将创建名为 monitorRole 和 controlRole 的两个用户,并为每个用户分配一个密码。这两个用户都必须在 <JRE>/lib/management/jmxremote.access 下的 JDK jmxremote.access 文件中具有一个条目。
◦ monitorRole 提供只读权限。
◦ controlRole 被授予读写权限。
远程用户必须提供这两个角色名称中的一个及关联密码,才能获得对 Windchill MBean 的访问。这两个角色的用户名和密码写入在一个名称为 <Windchill>/Windchill/jmxremote.password 的文件中,并且此文件被服务器管理器 java 命令行中的特性引用。
• 匿名
启用匿名远程访问时,任何远程客户端都可进行连接,无需提供用户名或密码。
以下示例显示了设置验证远程访问时显示的提示:
[input] Do you want to enable authenticated (non SSL) remote JMX access to the ServerManager(y/n)? (y, [n])
y
[echo] Configuring authenticated remote JMX access
[input] servermanager monitor role name: [monitorRole]
[input] servermanager monitor role password: [bigBrother15]
[input] servermanager control role name: [controlRole]
[input] servermanager control role password: [autoCrat100]
配置无用单元收集诱发 (GCBaiter)
为减少因无限制的内存操作导致方法服务器堆耗尽的可能性,Assistant 将配置一个称为“无用单元收集诱发 (GCBaiter)”的功能。当方法服务器堆的利用率为 100% 时,JVM 通常会崩溃并出现 OutOfMemoryError。GCBaiter 会尝试在 OutOfMemoryError 出现之前确定耗用绝大部分可用堆的用户操作,然后将其终止。当 JVM 检测到低内存状况时 (例如,当 JVM 无用单元收集器需要收集 SoftReferences 时),将自动启动 GCBaiter。GCBaiter 使用 MethodServer.gcBaiting.suggestedMinAvailableHeapPercent 特性来检测方法服务器的可用堆空间何时降低到所要求的最小值之下。
Windchill Configuration Assistant 以占方法服务器堆最大大小百分比的形式计算 GCBaiter 使用的最小可用堆值。默认值为 5%,由特性 MethodServer.gcBaiting.suggestedMinAvailableHeapPercent 控制。请注意,启用 GCBaiting 时,Assistant 不会设置 DisableExplicitGC Java 命令行选项。
以下示例显示了设置“无用单元收集诱发”目标 configureGCBaiter 时显示的提示:
configureGCBaiter:
[input] Do you want to enable automatic termination of requests to avoid OutOfMemory (y/n)? ([y], n)
[input] Minimum percentage of heap available: [5]
[xslt] Processing <Windchill>\codebase\WEB-INF\methodServerMBeanConfig.xml to <Windchill>\utilities\wca\conf\windchillmethodServerMBeanConfig.xml
[xslt] Loading stylesheet <Windchill>\utilities\wca\GCBaiter.xsl
[xslt] Add minAvailableHeapThreshold: 5