本章介绍优化 Calendar Server 性能的概念性信息和说明。
要改进 Calendar Server 的性能,请考虑使用以下方法:
要改进 Calendar Server 访问 LDAP Directory Server 时的性能,请在 LDAP 配置文件中添加以下属性的索引:
此属性用于搜索日历用户或资源的默认日历。指定存在 (pres)、等式 (eq) 和子串 (sub) 索引类型。
此属性用于搜索用户所拥有的其他日历。指定存在 (pres)、等式 (eq) 和子串 (sub) 索引类型。另请参见21.2 提高日历搜索在 DWP 环境中的性能。
这两个属性用于指定用户的主电子邮件地址和备用电子邮件地址。另请参见14.1 创建日历用户 LDAP 条目和14.5.4.3 使用 Calendar Server 实用程序添加日历服务。
有关添加目录服务器索引的信息,请参阅以下位置处的 Directory Server 文档:
http://docs.sun.com/coll/1316.1 及 http://docs.sun.com/coll/1389.1
处于 DWP 环境(即,日历数据库分布在多个后端服务器中)中时,在日历数据库中搜索某个日历将会消耗大量时间。如果先在 LDAP 条目中查找,然后直接找出该日历所在的那个 DWP 主机,日历搜索的速度将会更快。
本节包含以下主题:
要启用日历搜索先查看 LDAP 目录,然后查看日历数据库,请执行以下步骤:
以具有配置权限的管理员身份登录。
发布 stop-cal 命令停止 Calendar Server 服务。
转至配置目录 /etc/opt/SUNWics5/cal/config。
将 ics.conf 文件中的 service.calendarsearch.ldap 参数设置为 "yes"(默认值),如下所示:
service.calendarsearch.ldap="yes"
重新启动日历服务,如下所示:
start-cal
如果允许匿名访问公共日历,您可能希望禁用日历搜索对 LDAP 进行查看。事实上,Communications Express 要求此参数值为 "no"。
要确定是否可以通过创建索引提高日历搜索性能,请尝试使用以下 LDAP 命令:
ldapsearch -b "base" "(&(icscalendarowned=*user*) (objectclass=icsCalendarUser))" |
其中,base 是用户和 Calendar Server 资源数据所在的 Directory Server 的 LDAP 基本 DN,user 是最终用户可以在搜索对话框中输入的值。
测试表明,如果没有为 icsCalendarOwned 创建索引,使用上述搜索功能搜索 60,000 个条目大约需要 50 到 55 秒。而创建索引后,上述搜索只需要大约 1-2 秒时间。
通过运行 comm_dssetup.pl 为相应的 LDAP 属性或仅仅为 icsCalendarOwned 创建索引。
comm_dssetup.pl 将为该属性和许多其他属性创建索引,以提高各方面的性能。如果尚未运行 comm_dssetup.pl,或者已运行但尚未执行创建索引操作,则可以再次运行此实用程序来创建索引,也可以使用 Directory Server 工具来执行创建索引操作。
有关 comm_dssetup.pl 如何创建索引的信息,参见《Sun Java System Communications Suite 5 Installation and Configuration Guide》中的 "Attribute Indexes"。
有关添加目录服务器索引的信息,请参阅以下位置处的 Directory Server 文档:
http://docs.sun.com/coll/1316.1 及 http://docs.sun.com/coll/1389.1
默认情况下,Calendar Server 中禁用通配符搜索。即,当您使用图形用户界面搜索日历时,或在自定义界面中发出 search_calprops.wcap 时,它将搜索与使用 WCAP 命令传递的搜索字符串完全匹配的字符串。
如果您通过取消注释 ics.conf 文件中的以下行(删除开头的惊叹号 "!")启用了通配符搜索,则可能对性能产生负面影响。
!service.calendarsearch.ldap.primaryownersearchfilter = "(&(|(uid=*%s*)(cn=*%s*))(objectclass=icsCalendarUser))"
要测试通配符搜索对性能的影响,请通过在行前插入惊叹号 ("!") 再次注释行。
在系统访问日历数据库中的日历之前,系统必须确定哪台后端计算机存储了该用户的日历。为了找到相应的后端计算机,系统将搜索 LDAP 目录以查找该用户的条目并选取 icsDWPHost 属性。此搜索会消耗大量时间,而且每次对日历数据进行访问时都必须执行它。每个用户会话都需要多次访问数据库,从而导致多次搜索 LDAP。为了节省时间并提高性能,通过编辑 ics.conf 文件来启用 CLD 高速缓存,如下所示:
caldb.cld.cache.enable="yes"
LDAP 数据高速缓存存储了用户 ID 及其关联的 icsDWPHost 属性。在搜索 LDAP 查找用户条目之前,系统将检查该高速缓存中是否存在该用户 ID。如果高速缓存中有该用户 ID,系统将从存储在高速缓存中的 icsDWPHost 属性中选取后端主机名。如果高速缓存中没有该用户 ID,系统将执行 LDAP 搜索并将该用户 ID 和属性复制到 CLD 高速缓存中。以后,对该用户日历数据的访问速度就会变快,因为现在可以在高速缓存中找到该用户 ID。
启用 LDAP 数据高速缓存后,可以使用 ics.conf 参数对其进行优化,请对下表中列出的一个或多个参数进行调整:
默认情况下,已启用 LDAP 数据高速缓存。您可以通过以下设置来禁用它:local.ldap.cache.enable="no"
参数 |
说明/值 |
---|---|
local.ldap.cache .checkpointinterval |
检查点之间检查点线程休眠的秒数。默认值为 "60"。 在活动频繁的 LDAP 中,您可能需要降低该时间间隔以使高速缓存尽可能地保持当前状态。同时,请记住刷新高速缓存的频率越高,引入的系统开销就越多。 |
local.ldap.cache. circularlogging |
指定在处理完 LDAP 数据高速缓存数据库日志文件之后是否将其删除。默认值为 "yes"。 请勿更改该参数,除非您有用于删除旧日志文件的自定义清理例程。 |
local.ldap.cache. logfilesizemb |
以兆字节为单位指定检查点文件大小的最大值。默认值为 "10" 兆字节。 如果您拥有一个活动频繁的 LDAP,此文件可能在检查点时间间隔结束之前填满。请根据您的经验尝试将该值设置为接近日志实际大小的值。 |
local.ldap.cache. maxthreads |
指定 LDAP 数据高速缓存数据库的最大线程数。默认值为 "1000"。 在活动频繁的 LDAP 中,您可能希望增加线程数。这可能会导致对 CPU 占用的增加。仅当 LDAP 活动程度最小时,才能减少线程数。 |
local.ldap.cache. mempoolsizemb |
以兆字节为单位指定共享内存的大小。默认值为 "4" 兆字节。 |
local.ldap.cache. entryttl |
以秒为单位指定 LDAP 数据高速缓存条目的“生存时间”(Time to Live, TTL)。默认时间为 "3600" 秒(1 小时)。 如果高速缓存过快地填满(活动频繁),您可以减少 TTL。但是,这会增加 LDAP 数据库的总访问次数,从而降低系统的总体性能。 |
local.ldap.cache. cleanup.interval |
以秒为单位指定清理各个高速缓存数据库的时间间隔。默认值为 "1800" 秒(30 分钟)。 系统将删除过期条目。此时间间隔不必与条目的 TTL 相同。但将这两个时间同步会使系统更高效。 |
local.ldap.cache. stat.enable |
指定是否将访问记录到 LDAP 数据高速缓存,以及是否在日志文件中记录统计信息。默认值为 "no"。 为了增强性能,请仅在调试模式下使用此参数。 |
local.ldap.cache. stat.interval |
以秒为单位指定每个统计报告写入日志文件的时间间隔。默认值为 "1800" 秒(30 分钟)。 仅当启用 local.ldap.cache.stat.enable 时,此参数才处于活动状态。减少时间间隔有助于您查明问题所在。增加时间间隔有助于降低系统负载。 |
Communications Express 要求禁用数据高速缓存。
有一对参数用于控制项目保存在高速缓存中的时间以及高速缓存可以具有的大小。
要对高速缓存进行优化,请编辑下表中列出的一个或多个参数。
表 21–2 用于配置 LDAP SDK 高速缓存的 ics.conf 参数
参数 |
说明和默认值 |
---|---|
目前尚未实现。必须手动删除 ldap_cache 目录中的内容,然后重新启动 Calendar Server。 如果将 service.ldapmemcache 设置为 "yes",则可以使用此参数来设置所允许的项目的最大高速缓存秒数。如果设置为 "0",则项目的高速缓存时间没有限制。默认值为 "30"。 |
|
如果将 service.ldapmemcache 设置为 "yes",则可以使用此参数来设置高速缓存将消耗的最大内存量(以字节为单位)。如果设置为 "0",则高速缓存没有大小限制。默认值为 "131072"。 |
必须根据需要调整保留在磁盘上的备份数目,以使其不会超出可用磁盘空间。您可以通过更改各种 ics.conf 参数来管理归档和紧急备份所占用的磁盘空间量,这些参数用于确定可以同时保留的备份副本数以及将触发清理旧副本操作的磁盘空间阈值。
可以针对每种备份类型(归档和紧急备份)调整以下三种参数:
mindays—备份可以保存在磁盘上的最少天数。
maxdays—备份可以保存在磁盘上的最多天数。
threshold—已用磁盘空间占总磁盘空间的百分比。此参数用作触发点。
Calendar Server 保留备份的最多可能天数是以不超过磁盘空间阈值为准。因此,如果当前备份将要使磁盘使用率超过阈值,系统将清除最早的备份副本,并查看磁盘使用率是否降低到阈值以下。系统将继续清除早期的备份副本,直到满足以下条件之一:再删除一个备份副本将使磁盘上的备份数目小于备份副本的最小数目,或者磁盘空间使用率已低于阈值。
因此,您可以使用阈值参数来管理备份使用的磁盘空间量。反之,您也可以通过调整允许的磁盘空间量和副本数目来管理保留在磁盘上的备份数目。
下表列出了用于控制磁盘空间和在磁盘上保留的备份数目的 ics.conf 参数。
表 21–3 用于设置保存在磁盘上的备份数目的 ics.conf 参数
ics.conf 参数 |
默认设置 |
说明 |
---|---|---|
caldb.berkeleydb.hotbackup.mindays |
3 |
将紧急备份保留在磁盘上的最少天数。 |
caldb.berkeleydb.hotbackup.maxdays |
6 |
将紧急备份保留在磁盘上的最多天数。 |
caldb.berkeleydb.hotbackup.threshold |
70 |
用于紧急备份的磁盘空间占总磁盘空间的百分比。超过此值时将触发清除最早的副本。 |
caldb.berkeleydb.archive.mindays |
3 |
将归档备份保留在磁盘上的最少天数。 |
caldb.berkeleydb.archive.maxdays |
6 |
将归档备份保留在磁盘上的最多天数。 |
caldb.berkeleydb.archive.threshold |
70 |
用于归档备份的磁盘空间占总磁盘空间的百分比。超过此值时将触发清除最早的副本。 |
默认情况下,Calendar Server 会启用负载平衡。Calendar Server 使用以下算法达到负载平衡:进程在每 n 个连接中接受一个连接,其中 n 为进程数目。
要禁用负载平衡,将 service.http.loadbalancing 参数添加到 ics.conf 文件中,并将其设置为 "no"。然后重新启动 Calendar Server 以使更改生效。
如果服务器上有多个 CPU,则默认情况下 Calendar Server 会将 HTTP 服务(cshttpd 进程)和分布式数据库服务(csdwpd 进程)分布到这些 CPU 中。
如果要控制为每个服务运行的进程数目,可编辑 service.http.numprocesses 和 service.dwp.numprocesses 参数。默认情况下,在安装时将这些参数设置为服务器的 CPU 数目,但您可以重新设置这些值。例如,如果服务器具有 8 个 CPU,但您希望 cshttpd 和 csdwpd 只在 4 个 CPU 中运行,可以将这些参数设置为:
service.http.numprocesses="4" service.dwp.numprocesses="4"
本节介绍使用各种 ics.conf 参数的超时值来调优 Calendar Server 性能的概念性信息和说明。
共有以下几类超时:
Csadmind 的超时值
有关编辑 ics.conf 参数的信息,参见E.1 编辑 ics.conf 配置文件。
下表介绍了 ics.conf 文件中由管理 (csadmin) 服务使用的 Calendar Server 超时参数。
表 21–4 管理服务 (csadmin) 的 HTTP 超时值
参数 |
说明 |
---|---|
service.admin.idletimeout |
指定在空闲 HTTP 连接超时前 csadmind 服务等待的秒数。 默认值为 120 秒(2 分钟)。 |
service.admin.resourcetimeout |
指定资源日历的 HTTP 会话超时前 csadmind 服务等待的秒数。 默认值为 900 秒(15 分钟)。 |
service.admin.sessiontimeout |
指定 HTTP 会话超时前 csadmind 服务等待的秒数。 默认值为 1800 秒(30 分钟)。 |
下表介绍了 ics.conf 文件中适用于最终用户的 Calendar Server HTTP 超时参数。
表 21–5 ics.conf 文件中适用于最终用户的 HTTP 超时值(cshttpd 服务)
参数 |
说明 |
---|---|
service.http.idletimeout |
指定空闲 HTTP 连接超时前 cshttpd 服务等待的秒数。 默认值为 "120" 秒(2 分钟)。 |
service.http.resourcetimeout |
指定资源日历 HTTP 会话超时前 cshttpd 服务等待的秒数。 默认值为 "900" 秒(15 分钟)。 |
service.http.sessiontimeout |
指定 HTTP 会话超时前 cshttpd 服务等待的秒数。 默认值为 "1800" 秒(30 分钟)。 |
以下 ics.conf 文件参数以秒为单位指定要在 Calendar Server 扫描组调度引擎 (Group Scheduling Engine, GSE) 队列中的传入作业之前等待的时间:
gse.belowthresholdtimeout="3"
如果队列中的作业数目大于分配的最大线程数,最后一个线程始终会重新扫描队列。因此,此设置仅在作业数目少于分配的最大线程数时才有效。
默认值为 "3"。增加该值可以减少服务器扫描队列的频率,改进总体性能。但是,如果队列因事件数量的增加而变得太大,则可以减少该时间以加快处理队列。这有可能导致总体性能降低,但用于更新事件的时间会更短。