Tomcat 处理时间很小但 nginx 显示它很大

我在 nginx 后面有五个 tomcat 实例。

有时nginxupstream_response_time很大,超过1秒,而tomcat本地访问日志显示进程时间只有50ms(我用来%D记录进程时间)。

可能的原因是什么以及如何解决?网络似乎并不慢,因为其他应用程序运行速度很快。

更新:

似乎是 nginx upstream_response_time%D1 sec


噜噜哒
浏览 122回答 2
2回答

BIG阳

我对您的观察的假设是数据包丢失。这对我来说似乎是最有可能的问题,因为您说的是当他们有很多请求时会发生这种情况。tcpdump要对此进行测试,您可以使用或 来监控流量iftop。如果你在 Ubuntu 下,你可以安装并启动后者sudo&nbsp;apt-get&nbsp;install&nbsp;iftop sudo&nbsp;iftopLinux 中还有许多其他网络监控解决方案,令人惊叹的Wireshark适用于所有操作系统。ifconfig [interface]包丢失的原因之一可能是碰撞,如果您在 Linux 下,您可以使用 a 检查:me@mymahine:~$ ifconfig eth1eth1&nbsp; &nbsp; &nbsp; Link encap:Ethernet&nbsp; HWaddrf f:41:8d:ef:41:8d&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BROADCAST MULTICAST&nbsp; MTU:1500&nbsp; Metric:1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RX packets:0 errors:0 dropped:0 overruns:0 frame:0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TX packets:0 errors:0 dropped:0 overruns:0 carrier:0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; collisions:0 txqueuelen:1000 <-------------------------- check here ---&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RX bytes:0 (0.0 B)&nbsp; TX bytes:0 (0.0 B)Tomcat 和 Nginx 是否在同一台物理(或虚拟)机器上?

偶然的你

服务器通常对请求进行排队,直到有线程可用于处理它。如果队列中有很多请求,但只有几个线程,单个线程处理请求的速度可能很快,但如果加上时间,请求排队,消费者看到的时间会更长。请参阅:How to increase number of threads in tomcat thread pool?测量tomcat的排队请求数看看您是否可以增加线程数或减少 accept_count,但请记住,其他资源(如数据库连接)的数量可能也需要增加。还要记住,更多的线程可能意味着更多的资源竞争。尝试为此更改参数可能是值得的。通常访问日志还应该显示消息排队和处理的时间,但我不确定。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java