您会推荐哪些资源(书籍,网页等):
netstat -s
中的某些条目);我最了解的是此文档,但它是相当简短。
或者,欢迎您直接回答上述问题。
编辑要明确,问题不仅仅是“异常”延迟,而是一般的延迟问题。此外,它特别是关于以太网上的TCP / IP而不是其他协议(即使它们具有更好的延迟特性。)
关于延迟的内核可调参数,请记住:
echo 1 > /proc/sys/net/ipv4/tcp_low_latency
来自文档:
如果设置,TCP堆栈会做出更低的决策
延迟而不是更高的吞吐量。默认情况下,这个
选项未设置意味着更高的吞吐量是首选。
应用此默认值的应用程序示例
更改将是Beowulf计算群集。
默认值:0
您还可以在应用程序中禁用Nagle算法(这将缓冲TCP输出直到最大段大小),例如:
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <linux/tcp.h>
int optval = 1;
int mysock;
void main() {
void errmsg(char *msg) {perror(msg);exit(1);}
if((mysock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
errmsg("setsock failed");
}
if((setsockopt(mysock, SOL_SOCKET, TCP_NODELAY, &optval, sizeof(optval))) < 0) {
errmsg("setsock failed");
}
/* Some more code here ... */
close(mysock);
}
此选项的“相反”是TCP_CORK
,它将“重新Nagle”数据包。但要注意,因为TCP_NODELAY
可能并不总能达到预期效果,并且在某些情况下可能会损害性能。例如,如果要发送批量数据,则需要最大化每个数据包的吞吐量,因此请设置TCP_CORK
。如果您的应用程序需要立即交互(或者响应比请求大得多,否定开销),请使用TCP _NODELAY
。另请注意,此行为是特定于Linux的,并且BSD可能不同,因此告诫管理员。
确保使用您的应用程序和基础架构进行全面测试。