以下问题是我自己的理解,可能有些地方解释的不对。写这篇文章是方便自己以后出现相同的问题还要去google。
先看我的配置文件:
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/opt/lsmp/openfire/tsung/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" dumptraffic="false" version="1.0">
<clients>
<client host="shlab135" maxusers="80000" cpu="3">
<ip value="10.1.7.135"></ip>
</client>
</clients>
<servers>
<server host='10.1.7.139' port='5222' type='tcp' />
</servers>
<!-- register 80000 users in less than 15 minutes -->
<load>
<arrivalphase phase="1" duration="15" unit="minute">
<users maxnumber="80000" interarrival="0.0125" unit="second"></users>
<!--1/150=interarrival 150*duration*60=all number-->
算法: 1 每秒/每秒入用户数 = [参数:"interarrival"]
2 总用户数 = 每秒入用户数 * 60秒<分钟>
</arrivalphase>
</load>
<options>
<option type="ts_jabber" name="global_number" value="5"></option>
<option type="ts_jabber" name="userid_max" value="80000"></option>
<option type="ts_jabber" name="domain" value="erlang-projects.org"></option>
<option type="ts_jabber" name="username" value="135shlab"></option>
<option type="ts_jabber" name="passwd" value="135shlab"></option>
</options>
<sessions>
<session probability="100" name="jabber-example" type="ts_jabber">
<!-- 连接 -->
<request>
<jabber type="connect" ack="no_ack"></jabber>
</request>
<thinktime value="2"></thinktime>
<!-- 注册 -->
<request>
<match do="abort" when="match">error</match>
<jabber type="register" ack="local" id="new"></jabber>
</request>
<!-- 认证 -->
<transaction name="authenticate">
<request>
<jabber type="auth_get" ack="local"></jabber>
</request>
<request>
<jabber type="auth_set_plain" ack="local"></jabber>
</request>
</transaction>
<!-- 登录后持续300秒 -->
<request>
<jabber type="presence:initial" ack="no_ack" />
</request>
<thinktime value="600"></thinktime>
<!-- 关闭 -->
<request>
<jabber type="close" ack="no_ack"></jabber>
</request>
</session>
</sessions>
</tsung>
一:看xml文件load部分,每秒入80个用户在15分钟内。总的算起来15分钟大概是72000个用户注册和在线。我设置的最大的maxnumber="80000"。这样就会有两个限制。
- 一个是最大用户数80000
- 在15分钟内每秒入80个,也就是说15分钟内入的用户数。
上面这两种限制的优先级是第二条,优先时间限制。
安装时间配置也可以用下面这种方法:
<arrivalphase phase="1" duration="10" unit="minute">
<users arrivalrate="10" unit="second"> </users>
</arrivalphase>
解释:总共运行10分钟,每秒入10个用户。
二:如果多个tsung压一个cm或者server。一定要把tsung.xml 生成用户名的规则给改变。不然多个tsung client 生成出来的user 会存在名字相同的。这样登录server就会认为已经登录了。不在进行处理。
我就是用了tsung client 由于没改生成规则<<option type="ts_jabber" name="username" value="135shlab"></option> 这段> 每次测试都只能够到6W多。
三:如果tsung client cpu 内存都没压力。但是用户又上不去。修改/etc/sysctl.conf 文件
net.ipv4.tcp_rmem=4096 4096 16777216
net.ipv4.tcp_wmem=4096 4096 16777216
net.ipv4.ip_local_port_range = 1024 65000
fs.file-max=65535000
修改后立马生效则需要执行:sysctl –p
TCP微调
大多数现代操作系统一样,Linux现在做得很好的自动调整 TCP缓冲区,但,默认最大Linux的TCP缓冲区大小还是太小。下面是一些示例sysctl.conf中不同类型的主机命令。
对于一台主机与一个10G网卡,高达100ms的RTT网络路径优化,添加到/ etc / sysctl.conf中。
#增加TCP最大缓冲区大小可设置使用setsockopt()
net.core.rmem_max 16777216
net.core.wmem_max = 16777216
#增加Linux的自动调整TCP缓冲区限制
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
#增加处理器的输入队列
net.core.netdev_max_backlog = 30000
#推荐的默认的拥塞控制的长度是HTCP
net.ipv4.tcp_congestion_control = HTCP
#建议巨帧的主机启用
net.ipv4.tcp_mtu_probing = 1
还可以添加到/ etc / rc.local中(其中N是多少10G NIC):
/ sbin目录/ ifconfig命令ethN的txqueuelen 10000
对于一个10G网卡的主机上的高达200ms的RTT,或一个40G NIC路径可达50毫秒RTT网络路径优化:
#增加TCP最大缓冲区大小可设置使用setsockopt()
net.core.rmem_max 67108864
net.core.wmem_max = 67108864
#增加Linux的自动调整TCP缓冲区限制
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
#增加处理器的输入队列
net.core.netdev_max_backlog = 250000
#推荐的默认的拥塞控制的长度是HTCP
net.ipv4.tcp_congestion_control = HTCP
#建议巨帧的主机启用
net.ipv4.tcp_mtu_probing = 1
还可以添加到/ etc / rc.local中(其中N是多少10G NIC):
/ sbin目录/ ifconfig命令ethN的txqueuelen 10000
注意:你应该独自离开net.tcp_mem,为默认值都很好。一些性能专家说,也增加net.core.optmem_max的匹配net.core.rmem_max和net.core.wmem_max,但我们还没有发现有什么差别。也有专家说,设置net.ipv4.tcp_timestamps和net.ipv4.tcp_sack为0,因为这样可以降低CPU的负载