在 Proxy Server 环境中,许多元素会影响性能,其中包括代理客户机、Proxy Server、原始服务器和网络。本附录介绍用户可以进行的可能会提高 Proxy Server 性能的调整。
本附录仅供高级管理员使用。调节服务器时应十分小心,在进行任何更改前都必须备份配置文件。
本附录包含以下各节:
本节介绍分析 Proxy Server 性能时应考虑的常规问题。
本节包含以下主题:
禁用访问日志记录可以提高 Proxy Server 的性能。不过,这样做是有代价的,因为将无从知晓哪些人在访问 Proxy Server 以及他们请求了哪些页面。
通过在 obj.conf 文件中注释掉以下指令,可以禁用 Proxy Server 访问日志记录:
Init fn=“flex-init” access=“$accesslog” format.access=“%Ses->client.ip% - %Req->vars.auth-user% [%SYSDATE%] \\”%Req->reqpb.clf-request%\\“ %Req->srvhdrs.clf-status% %Req->srvhdrs.content-length%”...AddLog fn=“flex-log” name=“access”
默认情况下,Proxy Server 将用户和组验证结果高速缓存在 ACL 用户高速缓存中。您可以使用 magnus.conf 文件中的 ACLCacheLifetime 指令来控制 ACL 用户高速缓存保持有效的时间。 每次引用高速缓存中的某个条目时,都将计算其寿命并检查 ACLCacheLifetime。如果该条目的寿命大于或等于 ACLCacheLifetime,则不再使用它。
ACLCacheLifetime 的默认值为 120 秒,这意味着在长达两分钟的时间内,Proxy Server 可能会与 LDAP 服务器不同步。如果将该值设置为 0(零),则会关闭高速缓存,并强制 Proxy Server 在每次用户验证时都查询 LDAP 服务器。在实现访问控制时,此设置将会对 Proxy Server 的性能产生负面影响。如果将 ACLCacheLifetime 设置为一个较大的值,则每次更改 LDAP 条目时,可能都需要重新启动 Proxy Server,因为此设置将强制 Proxy Server 查询 LDAP 服务器。只有在 LDAP 目录不经常改变时才设置一个较大的值。
ACLUserCacheSize 是 magnus.conf 中的一个参数,用于配置高速缓存中最多可以保留的条目数。默认值为 200。新条目将添加到列表的开头,当高速缓存达到其最大大小时,此列表末尾的条目将被删除以便容纳新条目。
还可以使用 ACLGroupCacheSize 参数来设置每个用户条目最多可以高速缓存的组成员资格数。默认值为 4。由于组中不属于成员的用户不会被高速缓存,因此将导致对于每个请求都要对 LDAP 目录进行多次访问。
可以指定服务器套接字处发送缓冲区的大小 (SndBufSize) 和接收缓冲区的大小 (RcvBufSize)。这些参数可以在 magnus.conf 文件中进行配置。对于不同的 UNIX 和 Linux 操作系统,建议的值会有所不同。请参阅操作系统的文档以正确设置这些参数。
可以使用 magnus.conf 文件中的 AcceptTimeout 参数来指定服务器等待来自客户机的数据到达的秒数,此时间过后将关闭连接。如果数据在超时到期前未能到达,则会关闭连接。默认情况下,将此参数设置为 30 秒。在大多数情况下,不需要更改此设置。您可以通过将此参数设置为小于默认值来释放线程,但这样做可能会导致断开连接速度较慢的用户的连接。
增大 server.xml() 文件 LOG 标记中的 loglevel 属性值会导致服务器在错误日志中生成和存储更多信息。然而,将条目写入此文件中会影响性能。请仅在调试问题时增大日志记录级别,而在不处于故障排除模式时将日志记录级别降至最低。
启用 SSL 会提高 Proxy Server 的保密性和安全性,但是也会影响性能,因为对数据包进行加密和解密会导致发生系统开销。您可能需要考虑将加密和解密处理工作转移给硬件加速器卡。
Proxy Server 高速缓存并未存储在随机存取存储器中。每次从高速缓存中提取文档时,都会对文件系统进行文件访问操作。您可能需要考虑使用 Solaris 文件系统高速缓存将 Proxy Server 高速缓存预先装入到内存中。这样一来,将会从内存而不是从文件系统中提取对高速缓存的文件的引用。
超时对服务器性能具有显著影响。为 Proxy Server 设置最佳超时值有助于节省网络资源。
在 Proxy Server 中,可以使用两个特定于实例的 SAF(server application function,服务器应用函数)以及一个全局参数来配置超时值:
init-proxy() 函数用于初始化 Proxy Server 的内部设置。此函数在 Proxy Server 初始化过程中被调用,但还应在 obj.conf 文件中进行指定以确保正确初始化各值。
此函数的语法如下:
Init fn=init-proxy timeout=seconds timeout-2=seconds
在上例中,对 Proxy Server 的 init-proxy SAF 超时设置直接应用了以下参数:
timeout(代理超时)- 代理超时参数用于指示服务器在等待多长时间后退出闲置连接。如果代理超时值较高,会将重要的代理线程长时间地调配给可能出现故障的客户机使用。如果超时值较低,会退出需要运行很长时间才能产生结果的 CGI 脚本(如数据库查询网关)。
要确定服务器的最佳代理超时值,请考虑以下问题:
Proxy Server 是否要处理许多数据库查询或 CGI 脚本?
Proxy Server 所处理的请求数是否少到可以随时腾出进程?
如果对上述任一问题的回答是肯定的,则可以决定设置较高的代理超时值。建议的最高代理 timeout 值为 1 小时。默认值为 300 秒(5 分钟)。
通过访问 Server Manager 中 "Preferences" 选项卡下的 "Configure System Preferences" 页面,可以查看或修改代理超时值。使用 "Proxy Timeout" 来指代此参数。
timeout-2(中断后超时)- 中断后超时值指示 Proxy Server 在客户机退出事务后继续写入高速缓存文件的时间。换而言之,如果客户机在 Proxy Server 几乎已完成对文档的高速缓存时退出连接,则服务器可以继续对文档进行高速缓存,直至达到中断后超时值为止。
建议的最高中断后超时值为 5 分钟。默认值为 15 秒。
http-client-config 函数用于配置 Proxy Server 的 HTTP 客户机。
此函数的语法如下:
Init fn=http-client-config keep-alive=(true|false) keep-alive-timeout=seconds always-use-keep-alive=(true|false) protocol=HTTP Protocol proxy-agent="Proxy-agent HTTP request header"
这些设置包括:
always-use-keep-alive -(可选)布尔值,指示 HTTP 客户机是否可以对所有类型的请求重复使用现有持久性连接。默认值为 false,表示对于非 GET 请求或含有主体的请求,将不重复使用持久性连接。
protocol -(可选)HTTP 协议版本字符串。默认情况下,HTTP 客户机使用 HTTP/1.0 或 HTTP/1.1,具体取决于 HTTP 请求的内容。除非遇到特定的协议互操作性问题,否则不要使用 protocol 参数。
proxy-agent -(可选)代理服务器代理程序 (Proxy-agent) HTTP 请求标头的值。默认值为包含 Proxy Server 产品名和版本的字符串。
KeepAliveTimeout() 参数确定服务器使客户机与 Proxy Server 之间的 HTTP 保持活动连接或持久性连接处于打开状态的最长时间(以秒为单位)。默认值为 30 秒。如果闲置时间超过 30 秒,则连接会超时。最大值为 300 秒(5 分钟)。
magnus.conf 文件中的超时设置适用于客户机与 Proxy Server 之间的连接。obj.conf 文件内 http-client-config SAF 中的超时设置适用于 Proxy Server 与原始服务器之间的连接。
Proxy Server 通过从本地高速缓存提供文档而不是从原始服务器中获取文档来提高性能。这种方法的一个缺点是可能会提供过时的文档。
Proxy Server 可以执行检查来确定文档是否是最新的,如果确定文档是旧文档,则会刷新高速缓存的版本。只应在必要时执行这种最新性检查,因为频繁地检查文档会降低 Proxy Server 的总体性能。
最新性检查在 "Caching" 选项卡的 "Set Cache Specifics" 页面中进行配置。默认设置为每两小时检查一次是否有新文档。在 ObjectType 指令中使用 max-uncheck 参数来配置此信息。
为了提高服务器的性能,同时确保文档是最新的,可对最新性检查进行自定义,方法是结合上次修改因子确定合理的文档生命周期。
上次修改因子有助于根据先前已记录的更改来确定文档发生变化的可能性。
上次修改因子是介于 .02 与 1.0 之间的小数。将其与上次实际修改文档的时间和上次执行文档最新性检查时间之间的间隔相乘,然后将生成的数值与上次执行最新性检查到现在为止的时间进行比较。如果此数值小于这段时间间隔,则表明文档尚未过期。不过,如果此数值大于这段时间间隔,则表明文档已过期,将从原始服务器中获取新版本。
上次修改因子使您能够确保对最近更改过的文档的检查频率高于对旧文档的检查频率。
应将上次修改因子设置为介于 0.1 与 0.2 之间的某个值。
DNS 是用于将标准 IP 地址与主机名关联的系统。如果配置不合理,此系统会独占重要的 Proxy Server 资源。要优化性能,请考虑以下选项:
启用 DNS 高速缓存。
在 Server Manager 的 "Preferences" 选项卡下选择 "Configure DNS Cache" 链接,可以启用 DNS 高速缓存。选择对应于 DNS 高速缓存的 "Enabled" 单选按钮。
仅记录客户机 IP 地址而不记录客户机 DNS 名称。
在 Server Manager 的 "Server Status" 选项卡下选择 "Set Access Log Preferences" 链接,可以禁用客户机 DNS 名称日志记录。选择 "IP Addresses" 单选按钮以记录 IP 地址而不记录客户机主机名。
禁用反向 DNS。
反向 DNS 可将 IP 地址转换为主机名。在 Server Manager 的 "Preferences" 选项卡下选择 "Configure System Preferences" 链接,可以禁用反向 DNS。选择 "No" 单选按钮以禁用反向 DNS。
避免基于客户机主机名进行访问控制。
如果可能,在访问控制语句中使用客户机的 IP 地址而不使用主机名。
magnus.conf 文件中的 RqThrottle 参数用于指定 Proxy Server 可以处理的最大并发事务数。默认值为 128。更改此值可以调节服务器,从而最大程度地缩短所执行事务的等待时间。
为了计算并发请求数,服务器会对活动请求进行计数。当新请求到达时,服务器会将计数值加一;当服务器完成请求时,会从计数中减一。当新请求到达时,服务器会检查已处理的请求数是否达到了最大值。如果已达到限制,则会推迟处理新请求,直至活动的请求数降至最大数量以下。
通过查看由 perfdump 生成的 SessionCreationInfo 部分的数据,或查看 proxystats.xml 数据,可以监视并发请求数。利用此信息,可以确定与总线程数(限制)相比最大并发请求数(峰值)。以下信息来自 perfdump 输出:
SessionCreationInfo: ------------------------ Active Sessions 1 Keep-Alive Sessions 0 Total Sessions Created 48/128
Active Sessions 显示当前正在处理请求的会话(请求处理线程)数。Keep-Alive Sessions 与 Active Sessions 类似,但是专用于显示保持活动连接数。Total Sessions Created 同时显示创建的会话数以及允许的最大会话数。这些值是 RqThrottle 值的最小值和最大值。
RqThrottleMin 是服务器启动时至少需要启动的线程数。默认值为 48。也可以在 magnus.conf 文件中设置此参数,但默认情况下不显示此参数。
达到所配置的最大线程数并非表明情况一定是不理想的。您不必自动增加 RqThrottle 值。达到此限制意味着服务器在峰值负载下需要这么多线程。只要服务器能够及时处理请求,就表明对服务器的调节是适当的。不过,此时连接将在连接队列中排队等待,因此存在溢出队列的可能。如果 perfdump 输出有规律地显示创建的会话总数值经常接近 RqThrottle 的最大值,则请考虑增大线程限制。
合适的 RqThrottle 值范围为 100 到 500,具体取决于负载。
可以使用 magnus.conf 中的 KeepAlive* 及相关设置对入站连接池进行调节,其中包括下列设置:
有关这些参数的更多信息,参见《Sun ONE Web Server 6.1 SP6 Performance Tuning, Sizing, and Scaling Guide》的第 2 章,其网址为:
http://docs.sun.com/app/docs/doc/819-6516/
在此版本的 Proxy Server 中无法配置出站连接池设置。
如果增加 FTP 列表宽度,则允许使用较长的文件名,因而会减少文件名截断现象。默认宽度为 80 个字符。
在 Server Manager 的 "Preferences" 选项卡下选择 "Tune Proxy" 链接,可以修改 FTP 列表宽度。
合理地配置高速缓存可以提高服务器的性能。请在设计高速缓存体系结构时牢记以下建议:
分配负载。
使用多个代理高速缓存分区。
使用多个磁盘驱动器。
使用多个磁盘控制器。
正确设置高速缓存对于 Proxy Server 的性能至关重要。设置代理高速缓存布局时应记住的最重要规则是分配负载。应将高速缓存设置为每个分区大约具有 1 GB 的空间,并且应分布在多个磁盘和多个磁盘控制器中。与采用单个大容量的高速缓存相比,采用这种布置可以更快地创建和检索文件。
通过高速缓存批量更新功能,可以从指定的 Web 站点预先装入文件,或对高速缓存中已存在的文档执行最新性检查。当 Proxy Server 中的负载最低时,通常会启动此功能。您可以在 "Cache Batch Updates" 页面中批量创建、编辑和删除 URL,以及启用和禁用批量更新。
通过指定要进行批量更新的文件,可以主动(而不是根据需要)对内容进行高速缓存。可以通过 Proxy Server 对高速缓存中现有的若干个文件执行最新性检查,或预先装入某个特定 Web 站点的多个文件。
在具有服务器和代理网络的大型站点中,可能需要使用批量更新来预先装入此 Web 的给定区域。批处理进程可以跨文档中的链接执行递归下降分析,并在本地对内容进行高速缓存。此功能可能会成为远程服务器的负担,因此要谨慎使用。bu.conf 配置文件中的参数有助于防止该进程无限期地执行递归,可对该进程进行一定程度的控制。
使用 Proxy Server 访问日志可以确定哪些站点使用频率最高,并对这些站点执行批量更新以提高性能。
垃圾收集是指检查 Proxy Server 高速缓存并删除旧(过时)文件的过程。垃圾收集是一个占用大量资源的过程。因此,可能需要调节某些垃圾收集设置以提高性能。
以下参数具有对垃圾收集过程进行微调的能力。可以在 "Tune Garbage Collection" 表单上查看或修改这些参数,在 Server Manager 的 "Caching" 选项卡下选择 "Tune GC" 即可找到此表单。这些参数包括:
gc hi margin percent
gc lo margin percent
gc extra margin percent
gc leave fs full percent
gc hi margin percent 变量控制最大高速缓存大小的百分比,达到此百分比时,将触发垃圾收集。
此值必须高于 gc lo margin percent 的值。
gc hi margin percent 的有效范围为 10% 到 100%。默认值为 80%(达到高速缓存容量的 80% 时,将触发垃圾收集)。
gc lo margin percent 变量控制最大高速缓存大小的百分比,垃圾收集器以此百分比作为目标。
此值必须低于 gc hi margin percent 的值。
gc lo margin percent 的有效范围为 5% 到 100%。默认值为 70%(将目标定为垃圾收集后高速缓存的满容率达到 70%)。
如果垃圾收集是因分区大小接近最大允许大小 (gc hi margin percent) 以外的原因触发的,则垃圾收集器将使用由 gc extra margin percent 变量设置的百分比来确定要删除的高速缓存部分。
gc extra margin percent 的有效范围为 0 到 100%。默认值为 30%(删除现有高速缓存文件的 30%)。
gc leave fs full percent 值确定高速缓存分区大小的百分比,低于此百分比时将不会进行垃圾收集。此值可以防止垃圾收集器在某个其他应用程序独占磁盘空间时从高速缓存中删除所有文件。
gc leave fs full percent 的有效范围为 0(允许全部删除)到 100%(不删除任何内容)。默认值为 60%(允许高速缓存大小收缩到当前大小的 60%)。
可以使用 Solaris 内核中的各种参数来微调 Proxy Server 的性能。下表列出了其中的一些参数。
表 19–1 Solaris 性能调节参数
参数 |
范围 |
默认值 |
调节后的值 |
注释 |
---|---|---|---|---|
/etc/system |
1024 |
8192 |
处理打开的文件描述符限制。应将预期负载(关联套接字、文件和管道的预期负载,如果有)计算在内。 |
|
/etc/system |
64 |
8192 | ||
/etc/system |
2 |
0 |
控制流驱动程序队列大小。将此参数设置为 0 意味着缓冲区空间不足不会影响性能。请在客户机上也设置此参数。 |
|
ndd/dev/tcp |
240000 |
60000 |
请在客户机上也设置此参数。 |
|
ndd/dev/tcp |
128 |
1024 | ||
ndd/dev/tcp |
1024 |
4096 | ||
ndd/dev/tcp |
480000 |
60000 | ||
tcp_keepalive_interval |
ndd/dev/tcp |
7200000 |
900000 |
对于通信流量高的 Web 站点,请降低此值。 |
ndd/dev/tcp |
3000 |
3000 |
如果重新传输量超过 30-40%,请增加此值。 |
|
ndd/dev/tcp |
240000 |
10000 | ||
ndd/dev/tcp |
200 |
3000 | ||
ndd/dev/tcp |
32768 |
1024 |
请在客户机上也设置此参数。 |
|
ndd/dev/tcp |
1 |
2 |
可以略微提高传输少量数据时的速度。 |
|
ndd/dev/tcp |
8129 |
32768 |
使用此参数可以增大传输缓冲区。 |
|
ndd/dev/tcp |
8129 |
32768 |
使用此参数可以增大接收缓冲区。 |
有关这些参数的更多信息,参见《Sun ONE Web Server 6.1 SP6 Performance Tuning, Sizing, and Scaling Guide》的第 5 章,其网址为:
http://docs.sun.com/app/docs/doc/819-6516/