优化 XenMobile® 运行

Last published : Oct 21, 2026
XenMobile 运行的性能和稳定性涉及 XenMobile 中的许多设置,并取决于您的 Citrix ADC 和 SQL Server 数据库配置。本文重点介绍管理员最常配置的、与 XenMobile 调整和优化相关的设置。Citrix 建议您在部署 XenMobile 之前评估本文中的每个设置。
重要:
这些指南假设 XenMobile Server 的 CPU 和 RAM 足以支持设备数量。有关可伸缩性的更多信息,请参阅可伸缩性和性能。
以下服务器属性全局应用于整个 XenMobile 实例中的操作、用户和设备。更改某些服务器属性需要重新启动每个 XenMobile Server 节点。XenMobile 会在需要重新启动时通知您。
这些调整指南适用于群集和非群集环境。

hibernate.c3p0.idle\_test\_period

此 XenMobile Server 属性(一个自定义密钥)确定连接自动验证之前的空闲时间(以秒为单位)。按如下方式配置密钥。默认值为 30。
  • 密钥:自定义密钥
  • 密钥:hibernate.c3p0. idle\_test\_period
  • 值:120
  • 显示名称:hibernate.c3p0. idle\_test\_period
  • 描述:Hibernate 空闲测试周期

hibernate.c3p0.max\_size

此自定义密钥确定 XenMobile 可以打开到 SQL Server 数据库的最大连接数。XenMobile 将您为此自定义密钥指定的值用作上限。仅当您需要时才打开连接。根据数据库服务器的容量设置。
请注意集群配置中的以下等式。您的 c3p0 连接数乘以节点数等于 XenMobile 可以打开到 SQL Server 数据库的实际最大连接数。
在集群和非集群配置中,如果 SQL Server 规模不足,将该值设置得过高可能会在高峰负载期间导致 SQL 端出现资源问题。将该值设置得过低则意味着您可能无法充分利用可用的 SQL 资源。
按如下方式配置密钥。默认值为 1000。
  • 密钥:hibernate.c3p0.max\_size
  • 值:1000
  • 显示名称:hibernate.c3p0.max\_size
  • 描述:到 SQL 的数据库连接

hibernate.c3p0.min\_size

此自定义密钥确定 XenMobile 打开到 SQL Server 数据库的最小连接数。按如下方式配置密钥。默认值为 100。
  • 密钥:hibernate.c3p0.min\_size
  • 值:100
  • 显示名称:hibernate.c3p0.min\_size
  • 描述:到 SQL 的数据库连接

hibernate.c3p0.timeout

此自定义密钥确定空闲超时。如果您使用数据库集群故障转移,Citrix 建议您添加此自定义密钥并将其设置为缩短空闲超时。默认值为 120。
  • 键: 自定义密钥
  • 键: hibernate.c3p0.timeout
  • 值: 120
  • 显示名称: hibernate.c3p0.timeout
  • 描述: 数据库空闲超时

推送服务心跳间隔

此设置确定 iOS 设备检查 APNs 通知是否在此期间未送达的频率。增加 APNs 心跳频率可以优化数据库通信。值过大可能会增加不必要的负载。此设置仅适用于 iOS。默认值为 20 小时。
如果您的环境中有很多 iOS 设备,心跳间隔可能会导致比必要更高的负载。选择性擦除、锁定和完全擦除等安全操作不依赖此心跳。原因是当执行这些操作时,APNs 通知会发送到设备。
此值控制在 Active Directory 组员资格更改后策略更新的速度。因此,通常适合将此值增加到 12 到 20 小时之间以减少负载。

iOS MDM APNS 连接池大小

当设备数量超过 100 台时,过小的 APNs 连接池可能会对 APNs 活动性能产生负面影响。性能问题包括向设备部署应用程序和策略的速度变慢以及设备注册速度变慢。默认值为 1。我们建议您每增加约 400 台设备,将此值增加 1。

auth.ldap.connect.timeout

为弥补 LDAP 响应缓慢的问题,Citrix 建议您为以下自定义密钥添加服务器属性。
  • 键: 自定义密钥
  • 键: auth.ldap.connect.timeout
  • 值: 60000
  • 显示名称: auth.ldap.connect.timeout
  • 描述: LDAP 连接超时

auth.ldap.read.timeout

为弥补 LDAP 响应缓慢的问题,Citrix 建议您为以下自定义密钥添加服务器属性。
  • 密钥: 自定义密钥
  • 密钥: auth.ldap.read.timeout
  • 值: 60000
  • 显示名称: auth.ldap.read.timeout
  • 描述: LDAP 读取超时

其他服务器优化

服务器属性 默认设置 为什么要更改此设置?
后台部署 1,440 分钟 后台策略部署的频率,以分钟为单位。仅适用于 Android 设备的常开连接。增加策略部署的频率可降低服务器负载。建议设置为 1440(24 小时)。
后台硬件清单 1,440 分钟 后台硬件清单的频率,以分钟为单位。仅适用于 Android 设备的常开连接。增加硬件清单的频率可降低服务器负载。建议设置为 1440(24 小时)。
检查已删除的 Active Directory 用户的时间间隔 15 分钟 Active Directory 的标准同步时间为 15 分钟。值 0 可阻止 XenMobile 检查已删除的 Active Directory 用户。建议设置为 15 分钟。
MaxNumberOfWorker 3 导入大量批量购买许可证时使用的线程数。默认为 3。如果需要进一步优化,可以增加线程数。但是,如果线程数较大(例如 6 个),批量购买导入会导致 CPU 使用率过高。

如何检查 SQL 数据库中的死锁并删除历史数据

当您看到死锁时,运行以下查询以查看死锁。然后,数据库管理员或 Microsoft SQL 团队可以确认该信息。

SQL 查询

SELECT

db.name DB_Service,

tl.request_session_id,

wt.blocking_session_id,

OBJECT_NAME(p.OBJECT_ID) BlockedObjectName,

tl.resource_type,

h1.TEXT AS RequestingText,

h2.TEXT AS BlockingTest,

tl.request_mode

FROM sys.dm_tran_locks AS tl

INNER JOIN sys.databases db ON db.database_id = tl.resource_database_id

INNER JOIN sys.dm_os_waiting_tasks AS wt ON tl.lock_owner_address = wt.resource_address

INNER JOIN sys.partitions AS p ON p.hobt_id = tl.resource_associated_entity_id

INNER JOIN sys.dm_exec_connections ec1 ON ec1.session_id = tl.request_session_id

INNER JOIN sys.dm_exec_connections ec2 ON ec2.session_id = wt.blocking_session_id

CROSS APPLY sys.dm_exec_sql_text(ec1.most_recent_sql_handle) AS h1

CROSS APPLY sys.dm_exec_sql_text(ec2.most_recent_sql_handle) AS h2

GO

清理数据库

重要提示:
在更改表之前,请备份数据库。
  1. 运行以下查询以检查历史数据。
    select COUNT(*) as total_record from dbo.EWDEPLOY_HISTO;
    select COUNT(*) as total_record from dbo.EWSESS;
    select COUNT(*) as total_record from dbo.EWAUDIT;
  2. 从前面三个表中删除数据。
    注意:
    您可能在表中看不到历史数据。如果是这样,请跳过对该特定表运行截断查询。
    truncate TABLE dbo.EWDEPLOY_HISTO;
    truncate TABLE dbo.EWSESS;
    truncate TABLE dbo.EWAUDIT;
  3. 解除因死锁而阻塞的 SELECT 查询。此步骤可处理进一步的死锁。
    ALTER DATABASE <database_name> SET       READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE
  4. 默认情况下,数据库清理会保留七天的会话保留和审计保留数据,这对于许多用户来说太高了。将清理值更改为 1 或 2 天。在服务器属性中,进行以下更改:
    zdm.dbcleanup.sessionRetentionTimeInDays = 1 day
    zdm.dbcleanup.deployHistRetentionTimeInDays = 1 day
    zdm.dbcleanup.auditRetentionTimeInDays=1 day

清理 KEYSTORE 表中的孤立项

如果 XenMobile 节点性能不佳,请检查 KEYSTORE 表是否过大。XenMobile Server 将注册证书存储在 ENROLLMENT_CERTIFICATE 和 KEYSTORE 表中。当您删除或重新注册设备时,ENROLLMENT_CERTIFICATE 表中的证书会被删除。KEYSTORE 表中的条目会保留下来,这可能会导致性能问题。执行以下过程以清理 KEYSTORE 表中的孤立项。
重要提示:
在更改表之前,请备份数据库。
  1. 运行以下查询以检查历史数据。
    select COUNT(*) from KEYSTORE
  2. 使用以下查询检查 KEYSTORE 表中的孤立项。
    WITH cte(KEYSTORE_ID)
    AS (SELECT KEYSTORE_ID
        FROM ENROLLMENT_CERTIFICATE
        UNION
        SELECT CA_KEYSTORE_ID
        FROM LDAP_CONFIG
        UNION
        SELECT CLIENT_KEYSTORE_ID
        FROM LDAP_CONFIG
        UNION
        SELECT KEYSTORE_ID
        FROM SAML_SERVICE_PROVIDER
        UNION
        SELECT KEYSTORE_ID
        FROM SERVER_CERTIFICATE)
    SELECT keystore.id
    FROM keystore
        LEFT JOIN cte ON keystore.id = cte.KEYSTORE_ID
    WHERE KEYSTORE_ID IS NULL;
  3. 使用以下查询清除孤立项。
    WITH cte(KEYSTORE_ID)
        AS (SELECT KEYSTORE_ID
            FROM ENROLLMENT_CERTIFICATE
            UNION
            SELECT CA_KEYSTORE_ID
            FROM LDAP_CONFIG
            UNION
            SELECT CLIENT_KEYSTORE_ID
            FROM LDAP_CONFIG
            UNION
            SELECT KEYSTORE_ID
            FROM SAML_SERVICE_PROVIDER
            UNION
            SELECT KEYSTORE_ID
            FROM SERVER_CERTIFICATE)
        DELETE FROM keystore
        WHERE id IN
        (
            SELECT keystore.id
            FROM keystore
                LEFT JOIN cte ON keystore.id = cte.KEYSTORE_ID
            WHERE KEYSTORE_ID IS NULL AND keystore.TYPE = 'X_509'
        );
  4. 为 KEYSTORE 表添加索引以提高搜索效率。
    DROP INDEX "KEYSTORE_NAME_IDX" ON "KEYSTORE";
    ALTER TABLE "KEYSTORE" ALTER COLUMN "NAME" NVARCHAR(255) NULL;
    CREATE INDEX "KEYSTORE_NAME_IDX" ON "KEYSTORE"("NAME") INCLUDE ("ID", "TYPE", "CONTENT", "PASSWORD", "PUBLICLY_TRUSTED", "DESCRIPTION", "ALIAS", "MODIFICATION_DATE");