swoole server 连接超时问题

我们最近使用swoole重构了一个php服务,大致情况如下:

  • 使用swoole server形式,前端nginx以proxy_pass方式转发请求到swoole server。
  • 同步方式,服务从redis读取数据,格式化后返回给客户端,不存在阻塞操作。
  • 压测时发现一个很奇怪的问题,绕过nginx直接压测swoole server, 使用ab压测,并发100,qps可以达到2万,并且没有失败。 使用loadrunner等其他工具压测时,qps到2k左右就开始有失败的请求,并且反映出来的qps在几百到几千之间周期性的变化。
  • 系统上线后,在qps达到1k时,nginx日志出来大量异常,
    • 报502,"upstream timed out (110: Connection timed out) while connecting to upstream" 连结swoole server超时。
    • 报499,据分析是因为服务端超时导致连结关闭。 起初是怀疑worker数量不够,后来发现worker数量在24 ~ 100之间调整,并没有什么效果。我们线上服务器配置是24核/64G内存,系统负载很低。

系统ip/tcp/ulimit 方面的优化都已经做了,实在是想不通问题在哪儿,请各位高手帮忙分析一下。

代码示意:

Class AppServer {

function run() { swoole_set_process_name($this->serv_conf['name']); $this->serv = new swoole_http_server($this->serv_conf['host'], $this->serv_conf['port']); $this->serv->set(array( 'chroot' => CHROOT, 'daemonize' => 1, 'log_file' => LOGPATH.'hq_server.log',
'backlog' => 512, 'open_tcp_nodelay' => 1, 'max_conn' => 100000, 'worker_num' => 24, )); $this->serv->on('WorkerStart', array($this, 'onWorkerStart')); $this->serv->on('WorkerStop', array($this, 'onWorkerStop')); $this->serv->on('request', array($this, 'onRequest')); $this->serv->start(); }

function onWorkerStart { } function onWorkerStop { } function onRequest() { }

}

2015-11-15 23:55
0
0

韩天峰 - 关注外星人

赞同来自:

  • nginx和swoole之间是否启用了KeepAlive长连接?
2015-11-16 00:54

要回复问题请先登录注册