linux - 检查 TCP 性能

标签 linux performance networking tcp

我正在编写一个服务器应用程序,它应该满足大量请求。我尝试做一些测试,发现我对服务器吞吐量有一些限制。我目前的猜测是 TCP 处理中的瓶颈。

我的问题是:我如何证实或反驳我的猜测?我应该查看哪些指标以及哪些值可以被视为线索?我也非常感谢任何有关使用工具的建议。

服务器的操作系统是Linux。我的应用程序是用 Java 编写的。请随时在评论中询问更多信息。

PS 我不太确定这个问题应该发布在哪里。也许应该将其移至服务器故障?

UPD:这是一项 http 服务,当前吞吐量约为 450 请求/秒,平均响应大小约为 20 KB。请注意,对于每个客户端请求,它会向 mongodb 发出 6-8 个请求,向 memcached 发出 1 个请求。

UPD2:我忘记了非常重要的一点:网络接口(interface)未得到充分利用,1Gb 中仅使用了 80-100Mb。应用服务器和数据库上的CPU和内存也没有加载。

最佳答案

如果您还没有这样做,我建议您在服务器应用程序上实现一些日志记录。应用程序应至少打印以下统计信息:

  • 开始时间(收到请求的第一个字节)
  • 请求结束时间:收到请求的最后一个字节
  • 周转时间:收到请求的最后一个字节和写入响应的第一个字节之间的时间
  • 传输时间:将响应发送到客户端所需的时间

这将帮助您确定瓶颈是 TCP 开销还是您的应用程序。如果您想要快速查看脏图,可以使用 WireShark查看特定事务的最后一个请求数据包传入和第一个响应数据包传出之间的时间。然而,使用 WireShark 手动测量许多事务是很困难的,并且从长远来看,良好的日志记录可能会对您有所帮助。

祝你好运!

关于linux - 检查 TCP 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6032671/

相关文章:

javascript - 延迟属性不适用于 Google Maps API?

multithreading - 处理器何时才有一些内存 “close”?

networking - 有哪些方法/语言用于描述网络协议(protocol)/数据包结构?

ubuntu - 从 Redis 检索大型数据集

Java:在wi-fi路由器后面的设备中发送/接收Udp数据包

linux - 在纯 bash 中将密码传递给 ssh

c - 如何在64位机器下将libxml2和libcurl编译成32位?

linux - 在 CentOS 6.4 中意外删除了符号链接(symbolic link) libc.so.6。如何获得 sudo 权限来重新创建它?

linux - Ubuntu 命令行强制从辅助(或特定)监视器运行应用程序

mysql - 如果 first 为假,MySQL 是否运行所有 WHERE 条件