Linux 检查TCP性能

Linux 检查TCP性能,linux,performance,networking,tcp,Linux,Performance,Networking,Tcp,我正在编写一个服务器应用程序,它应该可以满足很多请求。我试着做了一些测试,发现我对服务器吞吐量有一些限制。我目前的猜测是TCP处理中的瓶颈 我的问题是:我如何证实或反驳我的猜测?我应该查看哪些指标,哪些值可以作为线索?我也将感谢任何关于使用工具的建议 服务器的操作系统是Linux。我的应用程序是用Java编写的。请随时在评论中询问更多信息 我不确定这个问题应该贴在哪里。是否应该将其移动到服务器故障 UPD:这是一个http服务,当前吞吐量约为450请求/秒,平均响应大小约为20KB。注意,它对m

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

我的问题是:我如何证实或反驳我的猜测?我应该查看哪些指标,哪些值可以作为线索?我也将感谢任何关于使用工具的建议

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

我不确定这个问题应该贴在哪里。是否应该将其移动到服务器故障

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


UPD2:我忘记了一个非常重要的问题:网络接口没有得到充分利用,1Gb中只有80-100Mb被使用。app server和DB上的CPU和内存也没有加载。

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

  • 开始时间(收到请求的第一个字节)
  • 请求结束时间:收到请求的最后一个字节
  • 周转时间:收到请求的最后一个字节和写入响应的第一个字节之间的时间
  • 传输时间:将响应发送到客户端所需的时间
这将帮助您确定瓶颈是TCP开销还是您的应用程序。如果您想要一个快速的脏视图,您可以使用查看特定事务的最后一个请求数据包进入和第一个响应数据包离开之间的时间。然而,使用WireShark手动测量许多事务是很困难的,而且良好的日志记录可能会在长期内帮助您解决问题


祝你好运

服务协议的性质是什么?什么是对你的“很多要求”?我认为用一个简单的例子来说,在这里是合适的。问题似乎更多的是编程/基准测试/优化,而不是直接使用服务器。你能做一个20行的Java程序,它有同样的性能限制吗?@awoodland很抱歉,我不能写这么小的实际例子@MattH请参阅更新。它是一个servlet容器,所以我对请求接收和响应写入的控制很差。我的猜测是基于所有网络交互的统一时间增长,包括从DB和memcache获取数据。啊,我明白了。您可以使用日志记录来查看是否大部分时间都花在等待mongodb或memcached的响应上,或者其他一些处理上。这将有助于缩小搜索瓶颈。您是否使用连接池与mongodb/memcached通信?如果每个客户端请求发出6-8个mongodb请求,您可以尝试增加连接池的大小。也许你的可用连接已经用完了。