-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How can I beyond 600K? #3
Comments
你的机器真舒服。 应该轻松过百万,调一下TCP参数,轻松过200万,把测试客户端移到另外的机器上,300万可以达到。 建议:
public static int randidelTime() {
// 把这个数改大
int ms = 5000 + r.nextInt(45000); // 5s ~ 50s
return ms;
} if (opened < CONCURENCY) {
// 可以试着调大这个数
Thread.sleep(20); // open 5000 per seconds most
} // 单个IP 可到6万左右
final static int PER_IP = 20000;
final static InetSocketAddress ADDRS[] = new InetSocketAddress[30];
// 600k concurrent connections
final static int CONCURENCY = PER_IP * ADDRS.length;
static {
// for i in `seq 200 240`; do sudo ifconfig eth0:$i 192.168.1.$i up ; done
final int PORT = 8000;
final int IP_START = 200; |
学校的小集群,呵呵,计划极限的测一下试试,给http-kit当个测试样例。我把客户端移走试试,不知网络IO会不会成瓶颈。 |
我刚改了一下代码。 在学好真好! 可以试着把 randidelTime 改得很大,网络开销会好很多。 public static int randidelTime() {
int ms = 10000 + r.nextInt(90000); // 10s ~ 100s
return ms;
} 可以先试一下单机,这种方式最简单了。 客户端移走,稍微改一下代码 ConcurrencyBench 就可。 单IP可以到6万连接。 |
那是一定,这边机器闲着也是浪费,有什么测试需求尽管说。 那我先测测单机。 |
现在又碰到一个瓶颈,大概并发量在100万左右,就开始 JDK换成了:
服务端: queue-size:204800,309600,影像不大。 客户端:
|
100万应该不是 系统的极限,我曾经达到过160万 (需要revert这个改动shenfeng/dictionary@0b741e8 ) http://shenfeng.me/how-far-epoll-can-push-concurrent-socket-connection.html 你可以从这几个方面看一下:
Connection reset by peer 我也有遇到过,不是特别清楚为什么,可能会是由于没有资源了。 |
还有,关于GC采用哪种方式有没有什么推荐? |
http-kit 只用了64k的 堆外内存(所有的共享这一个)。估计原因是TCP 的read/write buffer耗掉了所有的内存。可以考虑google一下,然后设置得小一点。 默认可能是8k左右,调整到2k或者4k,能double这个数字。 维护一个连接,http-kit 需要大概2k内存,150万 x 2k = 3G, 所以可以设置JVM的内存为4G左右,如果150万。
默认的可能ok。对这个的配置也不熟悉 |
OS: CentOS6.2
Kernel: 2.6.32-279.14.1.el6.x86_64
RAM: 32GB ECC
CPU: Xeon E5645 @2.40GHz * 2
JDK: 1.6.0_31
首先第一次按照http://http-kit.org/600k-concurrent-connection-http-kit.html 的设置
客户端基本正常:
然后服务端就开始报错:
第二次,修改main.clj中queue-size
接下来测试正常,客户端:
第三次,调整ConcurrencyBench.java下每个IP并发数:
基本到了660K就上不去了,一直Connection timed out:
现在瓶颈在CPU? 或者通过增加IP地址来提高并发?
The text was updated successfully, but these errors were encountered: