php丢包率测试,网络丢包故障分析

2024-02-05 07:20

本文主要是介绍php丢包率测试,网络丢包故障分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

某台「Nginx / PHP」服务器时不时出现HTTP服务卡住的现象。

开始我怀疑PHP有问题,但是通过查询Nginx的access日志,发现里面记录的PHP响应时间「$upstream_response_time」非常小,此外还通过Strace命令仔细核对了是否存在耗时的操作,结果一无所获,所以基本排除了PHP的嫌疑。

接着我把目光转移到了Nginx身上,琢磨着是不是Nagle算法导致的网络延迟,不过Nginx缺省就通过「tcp_nodelay」指令关闭了Nagle算法,所以基本排除了Nginx的嫌疑。

既然Nginx和PHP都有不在场的证据,那会不会是Linux内核参数的问题呢?因为这台Web服务器前面有NAT方式的LVS,所以如果「tcp_timestamps」和「tcp_tw_recycle」等内核参数设置不当的话,会导致网络故障,可是通过检查再次否定了这个推断。

问题到了这里似乎陷入了僵局,看来瞎蒙是没戏了,只好硬着头皮用tcpdump了,说硬着头皮是因为我这个山寨OPS对TCP协议实在是不熟悉,但是为了解决问题,只能赶鸭子上架了,找一个客户端重现故障,然后在服务端监听:

shell> tcpdump -i eth0 host and port 80

不出意外是一大堆天书般的结果,一句话:法海你不懂爱。好在菜鸟有菜鸟的玩法,祭出神器:Wireshark,可以通过它来可视化分析tcpdump生成的日志文件:

shell> tcpdump -w /path/to/log -i eth0 host and port 80

本例中最终的效果图大致如下所示:

09515W554-0.jpg

通过wireshark分析tcpdump结果

黑色一看就有问题,果断搜索:TCP Dup ACK,TCP Out-Of-Order,结果发现此类问题基本都意味着网络状况不好,推测网络可能存在丢包。

如何判断网络是否存在丢包呢?非常简单,通过常用的「ping」命令即可:

shell> ping -f

关于其中的「-f」选项,在手册中是这样解释的:

Flood ping. For every ECHO_REQUEST sent a period “.” is printed, while for ever ECHO_REPLY received a backspace is printed. This provides a rapid display of how many packets are being dropped. If interval is not given, it sets interval to zero and outputs packets as fast as they come back or one hundred times per second, whichever is more. Only the super-user may use this option with zero interval.

简单点说:发送洪水请求,每个请求打印一个点,每个响应删除一个点。如果网络存在丢包,那么会呈现出一长串不断增加的点,简单易用,童叟无欺。

最终确认了网络确实存在丢包。总算抓住了真凶,对一个山寨的OPS来说,问题分析到这里就算差不多了,至于为什么会丢包的问题,可能是网线的问题,也可能是网卡的问题,还可能是带宽的问题,等等等等,这些就留给真正的OPS去折腾吧。

这篇关于php丢包率测试,网络丢包故障分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/680135

相关文章

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An