To support over 500k users, you *need*
- A 64 bits hardware/kernel (AMD64, Opterons)
- At least 8GB of ram
- A recent linux kernel (2.6.x)
About tuning, I prefer to not fully disclose them because servers are targets of many attacks, so it's better not help hackers.
The most touchy thing is the IP route cache : You have to tune it or else the machine drops many connections
(hint : rhash_entries=... in the boot append string)
hints :
echo 1 > /proc/sys/net/ipv4/route/gc_interval
內定值是 60, 數值越小 cache 釋放的速度會越快
意思是說:cache 會記錄連線當時的資訊, 如 gateway
如果斷線的當時, cache 紀錄的 gateway 依然是斷掉連線的那一條線路的 gateway,
而且 cache 的 reflush 時間又還那麼長, 那就會產生連線失效的狀況
因此把數值調低素素看吧
echo 150 >/proc/sys/net/ipv4/route/gc_timeout
刷新路由缓冲的延迟
echo 2 >/proc/sys/net/ipv4/route/gc_elasticity
刷新路由缓冲的延迟
- Use of hugeTLB pages
hint :
echo xxx >/proc/sys/vm/nr_hugepages
设定的大小是以页(page) 的数量为单位的。xxx=64;200;1536 .
Tune tcp :
echo "4096 49152 131072" >/proc/sys/net/ipv4/tcp_wmem
为自动调优定义每个 socket 使用的内存。第一个值是为 socket 的发送缓冲区分配的最少字节数。第二个值是默认值(该值会被 wmem_default 覆盖),缓冲区在系统负载不重的情况下可以增长到这个值。第三个值是发送缓冲区空间的最大字节数(该值会被 wmem_max 覆盖)。
echo xxxx >/proc/sys/net/ipv4/tcp_max_syn_backlog
记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128。如果服务器不堪重负,试试提高这个值。注意!如果你设置这个值大于1024,最好同时调整include/net/tcp.h中的TCP_SYNQ_HSIZE,以保证 TCP_SYNQ_HSIZE*16 ≤tcp_max_syn_backlog
echo xxxx >/proc/sys/net/core/somaxconn
echo 1024 > /proc/sys/net/core/somaxconn
默认值是128
这个值不能调高系统的最大连接数,但是能调高系统同事发起连接的tcp连接数
如果是由于系统网络并发联机数过多导致连接不上,那么调整这个数值应该有效。
echo 1200000 > /proc/sys/net/ipv4/tcp_max_tw_buckets
系统同时保持timewait套接字的最大数量。如果超过这个数字,time-wait套接字将立刻被清除并打印警告信息。
echo 7 >/proc/sys/net/ipv4/tcp_retries2
在杀死一个活动的TCP连接之前重试多少次。RFC 1122规定这个限制应该长于100秒。这个值太小了。缺省值是15,相当于13~30分钟
echo "600000 650000 700000" >/proc/sys/net/ipv4/tcp_mem
确定 TCP 栈应该如何反映内存使用;每个值的单位都是内存页(通常是 4KB)。第一个值是内存使用的下限。第二个值是内存压力模式开始对缓冲区使用应用压力的上限。第三个值是内存上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的 BDP 可以增大这些值(但是要记住,其单位是内存页,而不是字节)。
echo 0 >/proc/sys/net/ipv4/tcp_timestamps
以一种比重发超时更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。
echo 0 >/proc/sys/net/ipv4/tcp_window_scaling
支持更大的TCP窗口. 如果TCP窗口最大超过65535(64KB), 必须设置该数值为1。
一般来说TCP/IP允许窗口尺寸达到65535字节。对于速度确实很高的网络而言这个值可能还是太小。这个选项允许设置上G字节的窗口大小,有利于在带宽*延迟很大的环境中使用。一旦内核认为它无法发包,就会丢弃这个包,并向发包的主机发送ICMP通知。
echo 0 >/proc/sys/net/ipv4/tcp_sack
特别针对丢失的数据包使用选择性ACK,这样有助于快速恢复。
echo 330000 >/proc/sys/net/ipv4/tcp_max_orphans
对于哪些没有附属于任何使用者文档 handle 的 TCP sockets﹐系统所能处理的最大数量。假如超过这个数量﹐那么这些无人看管的连线将会被立即重设(reset)﹐并同时显示警告信息。之所以要设定这个限制﹐纯粹为了抵御哪些简单的 DoS 攻击﹐千万不要依赖这个或是人为的降低这个限制﹐不过﹐如果网路条件需要比预设值更多﹐而且调整网路服务获得拖延并强制性砍掉这类状态﹐则可以提高它(或许还要增加内存)。再提醒一次﹕每一个这样的 orphan 都会吃掉 64K 不能置换的内存。
echo "10000 62000" >/proc/sys/net/ipv4/ip_local_port_range
用于向外连接的端口范围。缺省情况下其实很小:1024到4999。
others :
echo 1300000 >/proc/sys/fs/file-max
系统中的最大文件打开数
阅读(1513) | 评论(0) | 转发(0) |