低并发情况下产生Connection reset by peer的原因?

服务端提供了一个Restful api接口 本地启动服务端后 对其进行压测 很奇怪 并发数只要达到7个就玩不转了

ab -n 7 -c 7 -p post_data  -T 'application/json;charset=UTF-8' 'http://127.0.0.1:8000/foobar'



Benchmarking 127.0.0.1 (be patient)...apr_socket_recv: Connection reset by peer (54)

同时在服务端日志中能看到有如下的异常信息

Exception happened during processing of request from ('127.0.0.1', 54779)
Traceback (most recent call last):
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 321, in process_request
    self.finish_request(request, client_address)
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 334, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 657, in __init__
    self.finish()
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 716, in finish
    self.wfile.close()
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 283, in close
    self.flush()
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 307, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

wireshark中能看到很多RST

clipboard.png

但是奇怪的是

  • 部署在服务器上 压测调用远程服务 正常

  • 登录服务器 在服务器本地进行压测 也正常

同样的代码 怎么部署在我本地 并发数就很低呢?一点头绪都没有
目前知道的不同就是 我本地的是OSX系统 服务器是CentOS系统

补充信息

正常情况下 显式kill一个进程的时候 是如下的一个效果

          : Started ReviewExtractApplication in 2.241 seconds (JVM running for 2.618)
[1]    7988 killed     java -jar target/review-extract-0.0.1-SNAPSHOT.jar
➜  review-extract git:(master) ✗

但是kill压测的这个服务的进程的时候 后面怎么跟了这么多呢 就好像执行了很多次ctrl+c一样

[1]    6290 killed     python server.py 
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
➜  crfserver git:(crf) ✗
阅读 7.3k
1 个回答

这种情况下,应该首先查查远程rest接口服务所在服务器的防火墙设置

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进