Linux里面面对千万级服务器怎么做优化?

从以上两个输出可以看出,官方 Nginx(监听 80 端口)的平均延迟为 9.19ms,而案例 Nginx(监听 8080 端口)的平均延迟为 43.6ms。从延迟分布上来看,官方 Nginx 可以在 9ms 内完成 90% 的请求;对于案例 Nginx,50% 的请求已经达到 44ms。

那么这里发生了什么呢?我们来做一些分析:

在 host1 中,让我们使用 捕获一些网络数据包:

现在,在 host2 上重新运行 命令

当 命令完成后,再次切换回 Terminal 1(host1 的终端)并按 Ctrl+C 结束 命令。然后,用 把抓到的 复制到本机(如果 VM1(host1 的虚拟机)已经有图形界面,可以跳过复制步骤),用 打开。

由于网络包的数量很多,我们可以先过滤一下。例如,选中一个包后,可以右键选择 “Follow”->“TCP Stream”,如下图:

然后,关闭弹出的对话框并返回 主窗口。这时你会发现 已经自动为你设置了一个过滤表达式 。如下图所示(图中省略了源 IP 和目的 IP):

请注意,此图的左侧是客户端,而右侧是 Nginx 服务器。从这个图中可以看出,前三次握手和第一次 HTTP 请求和响应都相当快,但是第二次 HTTP 请求就比较慢了,尤其是客户端收到服务器的第一个数据包后,该 ACK 响应(图中的蓝线)在 40ms 后才被发送。

看到 40ms 的值,你有没有想到什么?事实上,这是TCP 延迟 ACK的最小超时。这是 TCP ACK 的一种优化机制,即不是每次请求都发送一个 ACK,而是等待一段时间(比如 40ms),看看有没有“搭车”的数据包。如果在此期间还有其他数据包需要发送,它们将与 ACK 一起被发送。当然,如果等不及其他数据包,超时后会单独发送 ACK。

由于案例中的客户端发生了 40ms 延迟,我们有理由怀疑客户端开启了延迟确认机制(Delayed Acknowledgment Mechanism)。这里的客户端其实就是之前运行的 。

根据 TCP 文档,只有在 TCP 套接字专门设置了 时才会启用快速确认模式(Fast Acknowledgment Mode);否则,默认使用延迟确认机制

让我们测试一下我们的质疑:

可以看到 只设置了 选项,没有设置 。现在您可以看到为什么延迟 Nginx(案例 Nginx)响应会出现一个延迟。

在本文中,我们向您展示如何分析增加的网络延迟。网络延迟是核心网络性能指标。由于网络传输、网络报文处理等多种因素的影响,网络延迟是不可避免的。但过多的网络延迟会直接影响用户体验。

使用 和 等工具确认单个请求和并发请求的网络延迟是否正常。

使用 ,确认路由正确,并查看路由中每个网关跳跃点的延迟。

使用 和 确认网络数据包是否正常收发。

使用 等观察应用程序对网络 socket 的调用是否正常。

据报道称“浏览器内核有上千万行代码”,浏览器内核真的很复杂吗?

我要回帖

更多关于 ubuntu做服务器稳定吗 的文章

 

随机推荐