【发布时间】:2015-01-12 03:16:47
【问题描述】:
我正在开发高性能 Web 服务器,它应该能够处理约 2k 的同时连接和 40k QPS,实现响应时间
它的作用是查询 Redis 服务器(在同一主机上运行)并将响应返回给客户端。
在测试期间,我观察到使用 TCP STREAM_SOCKET 的实现比使用 unix 套接字连接更好。大约 1500 个连接时,TCP 保持大约 8 毫秒,而 unix 套接字达到大约 50 个。
服务器是用 C 编写的,它基于常量 Posix 线程池,我使用阻塞连接到 Redis。我的操作系统是 CentOS 6,使用 Jmeter、wrk 和 ab 进行了测试。
为了与 redis 连接,我使用 hiredis 库,它提供了这两种连接到 Redis 的方式。
据我所知,unix socket 至少应该和 TCP 一样快。
有人知道什么会导致这种行为吗? .我被困住了。谢谢。
【问题讨论】:
-
您能否使用
redis-benchmark在您的应用程序之外复制这种较慢的速度? -
你设置了 SO_NODELAY 吗?在某些情况下,我已经看到这有很大帮助。
-
谢谢大家的回答! @TimCooper redis-bench 在 redis unix 套接字上运行良好,因此需要与我的应用程序相关。
-
@geert3 不幸的是,禁用 Nagle 没有帮助,我之前尝试过。
标签: c sockets unix redis server