linux性能优化实战 下载调优都有哪几种方法

温馨提示:虚拟产品一经售出概鈈退款

一个资源只可评论一次评论内容不能少于5个字

完整版以下为内容截图:

本课程分析Linux0.11内核源码的汇编启动部分,并讲解涉及到的软硬件等相关知识包括x86的保护模式,分页机制 大家通过学习这门课程,可以进入Linux源碼的大门通过阅读源码来学习Linux,可以让你真正的理解Linux同时,也希望大家有阅读源码的好习惯包括各种开源项目,都会有很大的收获

2、确认nginx正常启动(终端二)

3、运荇 hping3 命令来模拟 Nginx 的客户端请求(终端二)

# -S 参数表示设置 TCP 协议的 SYN(同步序列号),-p 表示目的端口为 80 # 注:如果你在实践过程中现象不明显可鉯尝试把 100 调小,比如调成 10 甚至 1

1、查看系统整体的资源使用情况(终端一)

根据上一期的内容既然软中断可能有问题,那你先要知道究竟是哪類软中断的问题

1、是系统运行以来的累积中断次数

不过这里的各类软中断次数,又是什么时间段里的次数呢它是系统运行以来的累积中断次数

所以我们直接查看文件内容得到的只是累积中断次数,对这里的问题并没有直接参考意义因为这些中断次数的变化速率才是我们需要关注的

2、观察各种软中断类型的次数(终端一)

1、通过/proc/softirqs 文件内容的变化情况,你可以发现 TIMER(定时中断)、NET_RX(网络接收)、SCHED(內核调度)、RCU(RCU 锁)等这几个软中断都在不停变化。

2、其中NET_RX也就是网络数据包接收软中断的变化速率最快。而其他几种类型的软中断昰保证 Linux 调度、时钟和临界区保护这些正常工作所必需的,所以它们有一定的变化倒是正常的

那么接下来,我们就从网络接收的软中断着掱继续分析,既然是网络接收的软中断第一步应该是观察系统的网络接收情况。这里你可能想起很多网络工具不过我推荐今天的主囚工sar

3、观察系统的网络接收情况(终端一)

sar可以用来查看系统的网络首发情况,还有一个好处不可以观察网络收发的吞吐量(BPS,每秒收发的字节數),还可以观察网络收发的PPS即每秒收发的网络帧数

# -n DEV 表示显示网络收发的报告,间隔 1 秒输出一组数据
 

我们具体来看输出的内容你可以发現:每秒接收的网络帧数远大于发送的网络帧数

既然怀疑是网络中断的问题,我们还是重点来看eth0接收的BPS很小稍微计算一下,说明平均每個网络帧数只有54字节这显然是很小的网络帧,这也就是我们通常所说的小包问题

4、这是一个什么样的网络帧从哪里发过来的呢?(终端┅)

那么有没有办法知道这是一个什么样的网络帧,以及从哪里发过来的呢

从tcpdump的输出中,你可以发现

2、目的位Nginx所在机器的80端口

到这里峩们已经做了全套的性能诊断和分析。

1、从系统的软中断使用率高这个现象出发

2、通过观察/proc/softirqs 文件的变化情况,判断出软中断类型是网络接收中断

4、SYN FLOOD 问题最简单的解决方法就是从交换机或者硬者硬件防火墙中封掉来源 IP,这样 SYN FLOOD 网络络帧就不会发送到服务器中

软中断CPU使用率升高是一种很常见的性能问题虽然软中断的类型很多,但实际生产中我们遇到的性能瓶颈大多数是网络收发类型的软中断,特别是网络接收的软中

在碰到这类问题时你可以借用sar、tcpdump等工具,做进一步分析不要害怕网络性能,后面我们会教你更多的分析方法

1、你所碰到嘚软中断问题

我的理解比较简单粗暴, 硬中断是硬件产生的,比如键盘、鼠标的输入,硬盘的写入读取、网卡有数据了;软中断是软件产生嘚比如程序内的定时器、[文中提到的RCU锁]。
再加上今天的上半部下半部更好的理解了网卡的处理实际是有硬中断和软中断的。

2、你所碰箌的软中问题是哪种类型

有且是血淋淋的教训。
之前的c程序用到了别人写的动态库[如:lib.a]在物理机上,进程的cpu利用率在0%;而切换到了云服務器即使空载,单进程的cpu利用率都有30%+
以前没经验嘛,各种自查,无结果,但是自己的进程cpu利用率又那么高,总是不安心.
后来才通过vmstat 检测到系统嘚软中断每秒有100W+次.
最后各自百度,找人,才发现是那个动态库在处理网络收发消息时,使用了usleep(1)来休息,每次休息1纳秒,单次中断的耗时都不止1纳秒.

3、昰不是这个案例中的小包问题?

如果是现在,我会如下分析:

1.检测是哪个线程占用了

2.在进程中打印各线程号. 找到是哪个线程.[ 此过程也可以省略 泹可以快速定位线程]

3.第一步应该可以判断出来中断数过高. 再使用 cat /proc/softirqs 查看是哪种类型的中断数过高.

5.最终还是要查看源码,定位具体的位置,并加以驗证.

4、你又是怎么分析它们的来源并解决的呢

1.sar 原来可以这么方便的看各网卡流量,甚至是网络帧数.

到目前为止,我都是用的最原始的方法:在網上找的一个脚本,分析ifconfig中的数据,来统计某个网卡的流量.一来需要指定某个网卡(默认eth0),二来显示的数据不太准确且不友好(sleep 1做差值).

我要回帖

更多关于 linux性能优化实战 下载 的文章

 

随机推荐