本部分针对在服务器池配置中部署 Instant Messaging 时的调节和性能,以及优化垃圾收集提供了一些有用信息,包括以下几个部分:
此信息应该与《Sun Java Communications Suite 5 Deployment Planning Guide》结合使用。
在服务器池部署中,您必须以完全相同的方式对服务器池中的每个 Instant Messaging 服务器进行设置。
请使用 J2SE 版本 5 来运行 Instant Messaging 服务器,因为其性能较佳,并且不需要命令行调节(支持工效学功能)。可在以下文档中找到有关使用此 Java 版本的详细信息:
Ergonomics in the 5.0 Java Virtual Machine(5.0 Java 虚拟机中的工效学)
Tuning Garbage Collection With the 5.0 Java Virtual Machine(使用 5.0 Java 虚拟机调节垃圾收集)
Instant Messaging 服务器使用 iim.conf 中的 iim.jvm.maxmemorysize 参数来设置要分配的 JVM 堆的最大大小。此参数的默认值为 256 MB,但 Instant Messaging 的大型活动部署可能需要更多内存。应该为服务器池中的 Instant Messaging 服务器分配多少内存取决于您需要支持多少个并发的活动用户。服务器池中的每个 Instant Messaging 服务器需要 256 MB 内存,另外对于日使用情况如下的每个连接/活动的用户,还需要 65 KB 内存:
两次在线信息更新
持续 10 分钟的五段聊天
一次多用户会议,持续时间为 15 分钟
一次注销和登录
而每个用户的其他负载、其他 Instant Messaging 服务(如新闻或文件传输)的使用以及某些功能(如消息过滤、归档或 SSL)的使用都将消耗更多内存。在将 Instant Messaging 部署到生产环境之前,应该对典型的用户活动执行负载分析。请联系 Sun 支持服务,以获取有关对 Instant Messaging 部署执行负载分析的详细信息。
Instant Messaging 提供了一组配置选项,可调整线程池(用于为客户端到服务器的请求以及服务器到服务器的请求提供服务)的大小和行为。与关联服务端口相结合的这些线程池可以提高 Instant Messaging 服务器的吞吐量。
选项名称 |
描述 |
默认值 |
---|---|---|
iim_server.maxthreads |
默认线程池的最大线程数。 |
20 |
iim_server.threadpool |
独立线程池的列表。 |
(全部使用默认线程池。) |
iim_server.threadpool.capacity |
默认线程池的容量 (*)。 |
10 * maxthreads |
iim_server.threadpool.aaa.maxthreads |
名为 aaa 的线程池的最大线程数: maxthreads(aaa) |
4 |
iim_server.threadpool.aaa.capacity |
名为 aaa 的线程池的容量。 |
10 * maxthreads(aaa) |
表 4–4 Sun Java Communications Suite 中定义的线程池
名称 |
使用 |
---|---|
s2s-in |
所有服务器到服务器的入站通信。如果端口允许服务器到服务器的通信,则使用此线程池。 |
s2s-out |
所有服务器到服务器的出站通信。如果端口允许服务器到服务器的通信,则使用此线程池。 |
s2s |
所有服务器到服务器的通信;s2s-in 和 s2s-out 的结合。 |
可以指定定义的线程池,并将其用于相关联的仅服务器服务端口,如服务端口配置中所述。可以在 iim.conf 中编辑线程和端口配置。在对线程和端口配置进行更改之后,需要重新启动服务器。
当超出线程池的容量时,将输出一个标准错误的消息。在请求数低于线程池容量值之前,Instant Messaging 服务器不会接受此线程池的任何其他请求。如果在服务器池环境中发生此情况,则您可能需要执行以下操作:
增加此线程池的容量
指定定义的线程池
调整此线程池的 maxthreads 数
使用仅服务器服务端口
可能需要增加内存
在服务器池之间更有效地分布用户
!s2s thread pool iim_server.threadpool=s2s-in iim_server.threadpool.s2s-in.maxthreads=5 |
本部分介绍了一些服务端口配置选项。
选项 |
定义 |
默认值 |
---|---|---|
iim_server.useport |
打开标准端口(允许 StartTLS) |
true |
iim_server.usesslport |
打开 SSL 端口(不可协商的 TLS) |
false |
iim_server.usemuxport |
打开多路复用器端口 |
true |
iim_server.port |
标准端口列表 |
5269 |
iim_server.sslport |
SSL 端口列表 |
5270 |
iim_mux.serverport |
多路复用器端口列表 |
45222 |
iim_server.port.port .sndbuf |
套接字 send 缓冲区大小 |
无 |
iim_server.port.port .rcvbuf |
套接字 recv 缓冲区大小 |
无 |
iim_server.port.port .interface |
要绑定到的特定网络接口列表 |
无(表示任何) |
iim_server.port.port .protocol |
此端口上允许的协议列表(客户端、服务器、组件、对等点) |
all/any |
iim_server.port.port .nodelay |
启用 Nagles 算法 |
false |
通过调整端口的发送或接收缓冲区大小可以提高服务端口的吞吐量。
iim_server.port = 5269, 45269, 15222 iim_server.port.5269.protocol = server iim_server.port.45269.protocol = peer, component iim_server.port.45269.sndbuf= 512000 iim_server.port.45269.recvbuf= 512000 iim_server.port.15222.protocol = client |
(问题编号:6279277)由于 1.4.2 和 1.5 版本的 JRE 处理垃圾收集的方式不同,因此在服务器主机上使用 1.4.2 版本的默认垃圾收集器时,可能无法获取最佳性能。要解决此问题,可以升级到 1.5 版本的 JRE,或者在调用服务器时包含以下命令行选项:
-XX:+UseParallelGC |
有关 JRE 垃圾收集的详细信息,请参见以下内容: