Sun Java System Web Proxy Server 4.0.8 管理指南

第 19 章 调节服务器性能

在 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”

ACL 高速缓存调节

默认情况下,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 目录不经常改变时才设置一个较大的值。

ACLUserCacheSizemagnus.conf 中的一个参数,用于配置高速缓存中最多可以保留的条目数。默认值为 200。新条目将添加到列表的开头,当高速缓存达到其最大大小时,此列表末尾的条目将被删除以便容纳新条目。

还可以使用 ACLGroupCacheSize 参数来设置每个用户条目最多可以高速缓存的组成员资格数。默认值为 4。由于组中不属于成员的用户不会被高速缓存,因此将导致对于每个请求都要对 LDAP 目录进行多次访问。

缓冲区大小

可以指定服务器套接字处发送缓冲区的大小 (SndBufSize) 和接收缓冲区的大小 (RcvBufSize)。这些参数可以在 magnus.conf 文件中进行配置。对于不同的 UNIX 和 Linux 操作系统,建议的值会有所不同。请参阅操作系统的文档以正确设置这些参数。

连接超时

可以使用 magnus.conf 文件中的 AcceptTimeout 参数来指定服务器等待来自客户机的数据到达的秒数,此时间过后将关闭连接。如果数据在超时到期前未能到达,则会关闭连接。默认情况下,将此参数设置为 30 秒。在大多数情况下,不需要更改此设置。您可以通过将此参数设置为小于默认值来释放线程,但这样做可能会导致断开连接速度较慢的用户的连接。

错误日志级别

增大 server.xml() 文件 LOG 标记中的 loglevel 属性值会导致服务器在错误日志中生成和存储更多信息。然而,将条目写入此文件中会影响性能。请仅在调试问题时增大日志记录级别,而在不处于故障排除模式时将日志记录级别降至最低。

安全性要求

启用 SSL 会提高 Proxy Server 的保密性和安全性,但是也会影响性能,因为对数据包进行加密和解密会导致发生系统开销。您可能需要考虑将加密和解密处理工作转移给硬件加速器卡。

Solaris 文件系统高速缓存

Proxy Server 高速缓存并未存储在随机存取存储器中。每次从高速缓存中提取文档时,都会对文件系统进行文件访问操作。您可能需要考虑使用 Solaris 文件系统高速缓存将 Proxy Server 高速缓存预先装入到内存中。这样一来,将会从内存而不是从文件系统中提取对高速缓存的文件的引用。

超时值

超时对服务器性能具有显著影响。为 Proxy Server 设置最佳超时值有助于节省网络资源。

在 Proxy Server 中,可以使用两个特定于实例的 SAF(server application function,服务器应用函数)以及一个全局参数来配置超时值:

init-proxy() SAF(obj.conf 文件)

init-proxy() 函数用于初始化 Proxy Server 的内部设置。此函数在 Proxy Server 初始化过程中被调用,但还应在 obj.conf 文件中进行指定以确保正确初始化各值。

此函数的语法如下:

Init fn=init-proxy timeout=seconds timeout-2=seconds

在上例中,对 Proxy Server 的 init-proxy SAF 超时设置直接应用了以下参数:

http-client-config() SAF(obj.conf 文件)

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"

这些设置包括:

KeepAliveTimeout() SAF(magnus.conf 文件)

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 设置

DNS 是用于将标准 IP 地址与主机名关联的系统。如果配置不合理,此系统会独占重要的 Proxy Server 资源。要优化性能,请考虑以下选项:

线程数

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 列表宽度

如果增加 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 hi margin percent 变量控制最大高速缓存大小的百分比,达到此百分比时,将触发垃圾收集。

此值必须高于 gc lo margin percent 的值。

gc hi margin percent 的有效范围为 10% 到 100%。默认值为 80%(达到高速缓存容量的 80% 时,将触发垃圾收集)。

gc lo margin percent 变量

gc lo margin percent 变量控制最大高速缓存大小的百分比,垃圾收集器以此百分比作为目标。

此值必须低于 gc hi margin percent 的值。

gc lo margin percent 的有效范围为 5% 到 100%。默认值为 70%(将目标定为垃圾收集后高速缓存的满容率达到 70%)。

gc extra margin percent 变量

如果垃圾收集是因分区大小接近最大允许大小 (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 值确定高速缓存分区大小的百分比,低于此百分比时将不会进行垃圾收集。此值可以防止垃圾收集器在某个其他应用程序独占磁盘空间时从高速缓存中删除所有文件。

gc leave fs full percent 的有效范围为 0(允许全部删除)到 100%(不删除任何内容)。默认值为 60%(允许高速缓存大小收缩到当前大小的 60%)。

Solaris 性能调节

可以使用 Solaris 内核中的各种参数来微调 Proxy Server 的性能。下表列出了其中的一些参数。

表 19–1 Solaris 性能调节参数

参数 

范围 

默认值 

调节后的值 

注释 

rlim_fd_max

/etc/system 

1024 

8192 

处理打开的文件描述符限制。应将预期负载(关联套接字、文件和管道的预期负载,如果有)计算在内。 

rlim_fd_cur

/etc/system 

64 

8192 

 

sq_max_size

/etc/system 

控制流驱动程序队列大小。将此参数设置为 0 意味着缓冲区空间不足不会影响性能。请在客户机上也设置此参数。 

tcp_close_wait_interval

ndd/dev/tcp 

240000 

60000 

请在客户机上也设置此参数。 

tcp_conn_req_max_q

ndd/dev/tcp 

128 

1024 

 

tcp_conn_req_max_q0

ndd/dev/tcp 

1024 

4096 

 

tcp_ip_abort_interval

ndd/dev/tcp 

480000 

60000 

 

tcp_keepalive_interval 

ndd/dev/tcp 

7200000 

900000 

对于通信流量高的 Web 站点,请降低此值。 

tcp_rexmit_interval_initial

ndd/dev/tcp 

3000 

3000 

如果重新传输量超过 30-40%,请增加此值。 

tcp_rexmit_interval_max

ndd/dev/tcp 

240000 

10000 

 

tcp_rexmit_interval_min

ndd/dev/tcp 

200 

3000 

 

tcp_smallest_anon_port

ndd/dev/tcp 

32768 

1024 

请在客户机上也设置此参数。 

tcp_slow_start_initial

ndd/dev/tcp 

可以略微提高传输少量数据时的速度。 

tcp_xmit_hiwat

ndd/dev/tcp 

8129 

32768 

使用此参数可以增大传输缓冲区。 

tcp_recv_hiwat

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/