我正在尝试调整在 Solaris 上运行的高消息流量系统。该架构包含大量 (600) 客户端,它们通过 TCP 连接到大型 Solaris 服务器,然后以高速率发送/接收相对较小的消息(.5 到 1K 有效负载)。目标是尽量减少处理每条消息的延迟。我怀疑服务器的 TCP 堆栈被所有流量压垮了。我可以使用哪些命令/指标来确认这一点,如果这是真的,缓解此瓶颈的最佳方法是什么?
答案1
snoop(1m)
和dtrace(1m)
可能是你最好的朋友。第一个用于观察和计时流量,第二个用于测量服务器的内部延迟。
答案2
如果您的总消息大小小于 1k,则使用 UDP 而不是 TCP 可以显著减轻网络负载。通过 TCP 发送短消息需要两端设置会话/连接信息、启动三次握手以及在网络上结束连接。
使用 UDP,您将发送一个包含消息的数据包,并依靠网络“尽力而为”。您可能希望对客户端进行一些超时编码,并在数据包丢失时重新传输,但如果您的事务和响应都在 MTU 之下,则您可以使用不到实际数据包的四分之一。