We've been using XBT Tracker (XBTT) on FreeBSD for quite a while. Now we have about 500k+ peers, and they are rapidly growing. And we have an announce interval of 700 second which is very low.
1. The only optimizations for XBT Tracker I've heard of in Linux are:
net.core.netdev_max_backlog = 4096
net.core.somaxconn = 4096
# In case you use listen_check
net.ipv4.tcp_syncookies = 1
#Timewait sockets (this can negatively impact clients under NAT)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.netfilter.ip_conntrack_max = 1048576
net.nf_conntrack_max = 1048576
Do not forget to increase maximum number of opened files:
ulimit -n 1000000
and save changes to
2. Our XBT Tracker uses following patch: Listen Queue Len increase
3. This configuration line can be helpful:
listen_check = 0
and also we have very short
read_files_interval = 2
write_db_interval = 3
4. MySQL tuning is required, as minimum you should increase
max_allowed_packet = 48M
5. Also as a side note, on Linux XBTT uses epoll(), while on other OSes it uses select() which is not suitable for highload.
PS. You can check out OpenTracker if nothing helps. But I didn't test it.