天道酬勤,学无止境

x86服务器中网络性能分析与调优(高并发、大流量网卡调优)

最近在百度云做一些RTC大客户的项目,晚上边缘计算的一台宿主机由于CPU单核耗被打满,最后查到原因是网卡调优没有生效,今天查了一下网卡调优的资料,欢迎大家共同探讨。

一.网卡调优方法

1、Broadcom的网卡建议关闭GRO功能

ethtool -K eth0 gro off

ethtool -K eth1 gro off

ethtool -K eth2 gro off

ethtool -K eth3 gro off

2、关闭irqbalance服务并手动分配网卡中断

service irqbalance stop
chkconfig irqbalance off
# 查看网卡中断号
grep ethx /proc/interrupts
# 分配到每颗颗CPU核上
cat /proc/irq/{84,85,86,87,88,89,90,91,92,93}/smp_affinity
echo 1 > /proc/irq/84/smp_affinity
echo 2 > /proc/irq/85/smp_affinity
echo 4 > /proc/irq/86/smp_affinity
echo 8 > /proc/irq/87/smp_affinity
echo 10 > /proc/irq/88/smp_affinity
echo 20 > /proc/irq/89/smp_affinity
echo 40 > /proc/irq/90/smp_affinity
echo 80 > /proc/irq/91/smp_affinity
echo 100 > /proc/irq/92/smp_affinity
echo 200 > /proc/irq/93/smp_affinity
PS:smp_affinity的值可以用下面脚本算哈,此脚本来自:http://rfyiamcool.blog.51cto.com/1030776/1335700
#!/bin/bash
#
echo "统计cpu的16进制"
[ $# -ne 1 ] && echo ‘$1 is Cpu core number’ && exit 1
CCN=$1
echo “Print eth0 affinity”
for((i=0; i<${CCN}; i++))
do
echo ==============================
echo "Cpu Core $i is affinity"
((affinity=(1<<i)))
echo "obase=16;${affinity}" | bc
done
使用方法:sh 脚本名字 空格 cpu核数


3、开启网卡的RPS功能 (Linux内核2.6.38或以上版本支持)

# Enable RPS (Receive Packet Steering)

rfc=4096

cc=$(grep -c processor /proc/cpuinfo)

rsfe=$(echo $cc*$rfc | bc)

sysctl -w net.core.rps_sock_flow_entries=$rsfe

for fileRps in $(ls /sys/class/net/eth*/queues/rx-*/rps_cpus)

do

echo fff > $fileRps

done

for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt)

do

echo $rfc > $fileRfc

done

tail /sys/class/net/eth*/queues/rx-*/{rps_cpus,rps_flow_cnt}

献上一个完整的脚本:

vi /opt/sbin/change_irq.sh

#!/bin/bash

ethtool -K eth0 gro off

ethtool -K eth1 gro off

ethtool -K eth2 gro off

ethtool -K eth3 gro off

service irqbalance stop

chkconfig irqbalance off

cat /proc/irq/{84,85,86,87,88,89,90,91,92,93}/smp_affinity

echo 1 > /proc/irq/84/smp_affinity

echo 2 > /proc/irq/85/smp_affinity

echo 4 > /proc/irq/86/smp_affinity

echo 8 > /proc/irq/87/smp_affinity

echo 10 > /proc/irq/88/smp_affinity

echo 20 > /proc/irq/89/smp_affinity

echo 40 > /proc/irq/90/smp_affinity

echo 80 > /proc/irq/91/smp_affinity

echo 100 > /proc/irq/92/smp_affinity

echo 200 > /proc/irq/93/smp_affinity

# Enable RPS (Receive Packet Steering)

rfc=4096

cc=$(grep -c processor /proc/cpuinfo)

rsfe=$(echo $cc*$rfc | bc)

sysctl -w net.core.rps_sock_flow_entries=$rsfe

for fileRps in $(ls /sys/class/net/eth*/queues/rx-*/rps_cpus)

do

echo fff > $fileRps

done

for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt)

do

echo $rfc > $fileRfc

done

tail /sys/class/net/eth*/queues/rx-*/{rps_cpus,rps_flow_cnt}

chmod +x /opt/sbin/change_irq.sh

echo "/opt/sbin/change_irq.sh" >> /etc/rc.local

PS:记得修改网卡中断号,别直接拿来用哦

二. 网络性能理论极限

网络数据包处理的性能指标,一般包括吞吐、延时、丢包率、抖动等。

数据包有大有小,数据包的大小对这些性能指标有很大的影响。

一般认为服务器处理能力很强,不是数据包处理的瓶颈,而通过物理线路能够传送数据包的最大速率,即线速(Wire Speed)才是网络性能的瓶颈点。

随着物理线路和网卡的不断发展,这个线速不断增大,带宽从100Mpbs、1Gbpbs、10Gbpbs、25Gbpbs、40Gbpbs,甚至到100Gpbs。此时服务器数据包处理能力越显重要。原有的服务器数据包处理方式已不能满足要求,一方面服务器硬件需要更新,另一个方面软件处理方式也需要变化。

物理线路上传送的这些0、1电或光信号,当有了格式规定就有了意义,我们知道以太网中有OSI七层模型和简化的TCP/IP四层模型,这些模型规定了一个数据包的格式,下面是一个以太帧(Ethernet frame,俗称二层)格式。

由于物理线路的信号冲突问题(https://en.wikipedia.org/wiki/Ethernet_frame#cite_note-7),一个以太帧(不带vlan)最小为7+1+6+6+2+46+4+12=84B,即我们常说的最小数据包64B,指的是6+6+2+46+4=64B。

根据以太帧的大小,我们就可以算出来,不同的以太帧大小在不同的物理线路上传输的速率,比如10Gbps的物理线路,一个10Gbps的网卡1秒内可以接收的64B的数据包的个数(packet per seconds,即pps)为

14.88Mpps(10^10/84/8),每个以太帧到达网卡的时间为67.20(10^9/14.88/10^6)纳秒,下图可以看出以太帧越大,pps越低,到达时间越长。

由于物理服务器处理数据包是一个一个处理,包括数据包的校验,数据包每一层包头的处理,所以数据包越小,到达时间就越短,服务器处理数据包要求就越高。比如64B的小包,如果处理数据包要达到线速,那么就要求服务器67.20纳秒就要处理完一个包,随着物理线路速率越大,处理时间就要求越短,这也就要求服务器硬件和软件都要相应的发展和升级来应对越来越多的数据包处理需求。

三.网卡接收与发送流程

发送流程如下:

1. CPU通知网卡控制器发送内存中的数据

2. 网卡控制器使用DMA将内存中的数据拷贝到网卡本地内存的发送队列

3. 网卡的MAC单元等待数据拷贝完成,准备发送

4. 网卡MAC单元通过PHY(PortPhysical Layer)单元将数据的数字信号转换为对应的电信号或光信号从线缆发送出去

5. 网卡控制器通知CPU数据发送完成

接收流程如下:

1. 网卡的PHY单元接收到数据包信号,将其转换为数字信号

2. 网卡的MAC单元将数据包存储在本地内存的接收队列上

3. 网卡控制器使用DMA将数据拷贝到系统内存上

4. 网卡控制器以中断方式告诉CPU数据包已放在了指定的内存空间

网卡连接主板接口的发展

1. 主板内置网卡(LAN OnMotherboard, LOM),一般为100Mbps或1Gbps,速度慢

2. PCI:也叫传统PCI,速度比较慢

3. PCI Express:支持热插拔,提供更高的总线传输率和带宽

网口的发展

常见接口:电口(RJ-45),光口,InfiniBand

速度发展从100Mbps到100Gbps快速发展

四.网卡控制器的发展

  目前常用的网卡控制器都是ASIC(专用集成电路)芯片,该芯片固化了网络的功能,速度快,设计完成后,成本低。但不可编程。

   现在FPGA的可编程控制器也越来越流行,原来FPGA是作为实验和研究的平台,比如设计和实验新的网络功能,之后使用ASIC实现。随着虚拟化,云计算的发展,FPGA成本的降低,FPGA的使用也越来越多。

   还有一种是ASIC和FPGA混合方案,力图做到兼顾两者的优点。

   ASIC芯片控制器的发展使得网卡的功能越来越强大,之前很多数据包处理的功能都是CPU来完成,占用大量CPU时间,很多重复简单的工作被网卡芯片来处理大大减轻了CPU的负担,这就是网卡offload功能。

我们使用 ethtool -k eth0 命令可以看到网卡支持的offload功能。

  • Checksumming:TCP,UDP数据包都有checksum字段,这些checksum的计算和校验交由网卡处理。
  • segmentation-offload:由于MTU的限制,从网卡发出去的包中PDU(ProtocolData Unit)需要小于等于MTU,所以网卡发出去的数据包的大小都有限制。用户态应用程序发送数据时,不会关心MTU,一个IP数据包最大可以是65535B,即MTU最大可以是65535,但是这个数据包要从网卡发出必须要切分为1500的小包。这个切分过程如果CPU来做会占用大量CPU时间,segmentation-offload就是网卡来做这件事。当然如果你将MTU设置为9000(jumbo frame),CPU和网卡都会少处理一些。MTU理论上虽然可以设置更大,但是9000是一个标准,交换机、网卡等都支持,为什么不能设置更大,一个原因是设备不支持,另一个原因是太大的话数据包传输过程中出错几率就变大,数据包处理慢,延时也变高。
  • receive-offload:这个和segmentation-offload刚好相反,网卡收到小包之后,根据包的字段知道可以合成为一个大包,就会将这些小包合成为大包之后给到应用程序,这样既减少了CPU的中断,也减少了CPU处理大量包头的负担。
  • scatter-gather:DMA将主存中的数据包拷贝到网卡内存时,由于主存中的数据包内容在物理内存上是分散存储的,如果没有scatter-gather,DMA没法直接拷贝,需要kernel拷贝一次数据让地址连续,有了scatter-gather,就可以少一次内存拷贝。
  • tx-fcoe-segmentation,tx-gre-segmentation,tx-ipip-segmentation,tx-sit-segmentation,tx-udp_tnl-segmentation,tx-mpls-segmentation: 这些基本是overlay或其他类型的数据包网卡是否支持的offload,比如udp_tnl就是指vxlan是否支持offload。
  • ntuple-filters,receive-hashing:如果网卡支持多队列,ntuple-filters使得用户可以设置不同的数据包到不同的队列,receive-hashing根据从网卡进来的数据包hash到不同的队列处理,实现并发接收数据包。

还有很多offload,都对性能有或多或少的影响。

随着网卡的不断发展,智能网卡会承载越来越多的功能,以减轻CPU的负担。

比如:

  • 将安全相关的处理(SSL/IPsec,防火墙,入侵检测,防病毒)集成在网卡中
  • 将协议栈实现在网卡中
  • 将虚拟交换机功能实现在网卡中(ASAP2)
  • 使用FPGA的网卡实现用户对网卡的自定义。

五.网卡offload

对于云计算中虚拟机的网络,首先充分利用网卡的Offload功能,性能会有很大提升,其次从虚拟机网卡到物理网卡的这段路径如何实现也会对性能产生很大影响,目前有四种方式

1. Passthrough方式:直接把物理网卡映射给虚机,虽然这种性能是最好的,但是丧失了虚拟化的本质,一个物理网卡只能被一个虚机使用。

2. SR-IOV方式:物理网卡支持虚拟化功能,能将物理网卡虚拟成多个网卡,让多个虚机直接使用,相当于虚拟机直接使用物理网卡功能,性能很好。但是对于虚拟机的防火墙,动态迁移等不好实现。

3. Virtio半虚拟化方式:Vritio是Hypervisor中IO设备的抽象层,虚拟机的网卡是Virtio的前端驱动实现,而后端驱动实现可以是Linux kernel中的vhost-net,也可以用户态的vhost-user。后端驱动实现的方式对Virtio性能影响很大。

4. 全虚拟化方式:完全由QEMU纯软件模拟的设备,性能最差。

六.网卡调优

硬件调优尽量使用网卡的offload,offload的成本是低的,效果是明显的。

Offload的一些参数调优

1. 查看设置网卡队列个数

ethtool -l eth0

2.查看设置ring buffer大小

ethtool -g eth0

3. 查看设置RSS的hash策略,比如vxlan的数据包,两个物理节点的mac和ip是不变的,我们在进行hash时可以算上port,这样两个物理节点之间vxlan也能使用网卡多队列。

ethtool -N eth0 rx-flow-hash udp4 sdfn

七.软件优化

标准Linux网络栈设计复杂,但也是最通用的。下面是一些优化点.

1. 软中断的优化处理

网卡的每个队列会对应一个CPU来处理数据包到达的软中断,合理的将网卡队列绑定到指定的CPU能更好的并发处理数据包,比如将网卡队列绑定到离网卡近的CPU上。

2. 减少不必要的网络栈处理,比如如果不使用ipv6,可以disable掉,如果不使用iptables,清空规则。

3. 网络参数的优化,比如调整socketbuffer,txqueuelen的大小等等。

b. OvS+DPDK

DPDK是Intel实现的一个用户态高速数据包处理框架,相比于Linux内核实现的数据包处理方式,有以下优势。

1. 用户态驱动程序,避免不必要的内存拷贝和系统调用。

2. 使用轮询方式从网卡获取数据包,避免中断方式的上下文切换开销。

3. 独占CPU处理数据包,虽然在网络流量低的时候浪费CPU资源,但是网络流量高的时候处理数据包性能很好,可以避免CPU切换导致的cache miss和上下文切换。最新DPDK可以实现流量小的时候使用中断方式,流量大的时候使用轮询方式。

4. 内存访问优化,充分利用NUMA架构,大页内存,无锁队列实现数据包的并发高效处理。

5. 软件的优化,比如cache line对齐,CPU预取数据,充分利用IntelCPU的网络相关新指令来提升性能。

6. 充分利用网卡的Offload功能实现硬件加速。

虽然DPDK对于数据包处理性能很好,但是它只是将数据包高效的送给用户态,而没有网络栈去处理数据包,社区版DPDK也无法与Linux网络栈很好结合,所以基于Linux网络栈实现的网络应用程序无法直接使用DPDK,如果要使用DPDK,应用程序需要重写。当然如果是全新的网络程序,基于DPDK开发是个不错的选择。

OvS是目前主流的虚拟交换机,支持主流的交换机功能,比如二层交换、网络隔离、QoS、流量监控等,而其最大的特点就是支持openflow,openflow定义了灵活的数据包处理规范,通过openflow流表可以实现各种网络功能,并且通过openflow protocol可以方便的实现控制+转发分离的SDN方案。

OvS丰富的功能和稳定性使得其被部署在各种生产环境中,加上云计算的快速发展,OvS成为了云网络里的关键组件。随着OvS的广泛使用,对OvS的性能也提出了更高的要求。

标准OvS的数据包处理是在kernel中有个datapath,缓存流表,实现快速数据包转发。Kernel中数据包的处理复杂,效率相比DPDK慢不少,因此使用DPDK加速能有效的提升OvS数据包处理的能力。

虽然DPDK没有用户态网络栈支撑,但是OvS提供的基于流表的交换机,负责连通虚机和网卡,不需要网络栈的更多功能,通过DPDK加速,云环境中虚机到网卡的性能得到了很大提升。

 

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 【转载】软件性能测试分析与调优实践之路-性能分析调优思想与调优技术总结
    本文主要阐述软件性能测试中的一些调优思想和技术,节选自作者新书《软件性能测试分析与调优实践之路》部分章节归纳。 一、 性能分析与调优思想 1、性能分析调优模型 性能测试除了为获取性能指标外,更多是为了发现性能瓶颈和性能问题,然后对性能问题和瓶颈进行分析和调优,在当今互联网高速发展的时代,性能调优的模型可以归纳总结如下图所示。 系统模型中相关的组件描述如下表所示 组件 描述 网络分发 网络分发是高速发展的互联网时代常用的降低网络拥塞,快速响应用户请求的一种技术手段,最常用的网络分发就是CDN(Content Delivery Network,即内容分发网络),依靠部署在世界各地的边缘服务器,通过中心平台的负载均衡、源服务器内容分发、调度等功能模块,使世界各地用户就近获取所需内容,而不用每次都到中心平台的源服务器获取响应结果,比如南京的用户直接访问部署在南京的边缘服务器,而不需要访问部署在遥远的北方的北京的服务器 Web服务器 Web服务器用于部署Web服务,Web服务器的作用就是负责请求的响应和分发以及静态资源的处理 Web服务 Web服务指运行在Web服务器上的服务程序,最常见的Web服务就是Nginx和Apache Web Cache Web Cache指Web层的缓存,一般都是临时缓存HTML、CSS、图像等静态资源文件 应用服务器 应用服务器用于部署应用程序,如Tomcat
  • 性能调优概述
    大纲:一、概述二、什么是性能调优?(what)三、为什么需要性能调优?(why)四、什么时候需要性能调优?(when)五、什么地方需要性能调优?(where)六、什么人来进行性能调优?(who)七、怎么样进行性能调优?(How)八、总结 注,硬件配置:CUP Xeon E5620 x 2 8核心, 内存 16G , 硬盘 RAID 10,操作系统: CentOS 6.4 x86_64(64位)。一、概述本来呢,这篇博文上个星期就应该写好了,但最近项目比较紧,晚上老是加班,于是我利用加班的一点时间进行了一些总结。主要内容是针对近三个月的项目实践总结。最后,领导让开个项目总结会,做一下团队分享。这篇博文就是团队分享中我和同事的一些实践经验的总结,现在写出来与大家分享一下。于由前面的博客中关于集群、负载均衡、缓存服务器、LAMP平台搭建、MySQL集群等诸多内容都有讲解,就是没有关于性能调优的详细内容,在这个专题中我和大家来说一说性能调优的话题。在这篇博文中,我不想用一些抽象的概念去说性能调优的问题,只想用最通俗的语言尽量来准确的表达我的想法。由于本人小平有限,有什么不对或者不清楚的地方欢迎大家交流指正。为了更能通俗易懂的理解我们即将要的性能调优的话题,我在这里简单的和大家说一下我写这篇文章的写作方法 “5w+1h”方法。注,5w+1h 就是对所做工作进行科学的分析
  • 阿里大佬倾情力荐:Java全线成长宝典,理论到实战,一键搞定!
    前言 对于大部分的程序员来说,清晰地规划自己的职业发展并不是一件容易的事情。作为一个曾经底子比较差,从底层摸爬滚打多年走过来的程序员,在这里分享一下对我帮助很大的一份宝典,希望同行们能快速掌握这些技术,直接弯道超车。 很多程序员不知道学什么?或者说不知道从何学习?今天分享的这份宝典由阿里大佬倾情力荐,Java全线成长宝典,从P5到P8一应俱全。 《Java全线成长宝典PDF版》,点击传送门即可! P5(年薪20W~40W):能够独立执行既定任务 1.打开程序员的大门 计算机基础+CPU/内存/硬盘+软、硬件关联+2进制、位运算Windows基础+环境变量+PATH/CLASSPATH+常用命令Linux基础+进程/文件命令+网络/安全命令/常用命令虚拟机的安装与使用+VMWARE+Linux安装 2.JavaSE核心 面向对象和基本语法+封装+继承+多态+标识符合保留字+数据类型+流程控制集合框架+COLLECTION+LIST+SET+MAP+COLLECTIONS+ARRAYS多线程+线程进程+Tread、Runnable+线程的生命周期+线程池IO框架+字节流+字符流+缓冲流+处理流+标准流+转换流设计模式+工厂模式+单例模式+适配器模式+装饰器模式+代理模式+策略模式+模板方法模式+访问者模式设计原则+单一职责原则+里氏替换原则+依赖倒置原则+接口隔离原则+迪米特原则
  • C/C++ Linux后台服务器开发高级架构师学习知识点路线总结(2021架构师篇完整版)
    C/C++ Linux后台服务器开发高级架构师学习知识点路线总结(2021架构师篇完整版) 前言: 小编之前有跟大家分享过一篇架构师体系知识点总结的文章,今天在原来的基础上有所改变更新(2021版)。 相信大家也知道,想要成为一名架构师肯定是需要一定的时间经验累积,才可以达到架构师的水平,今天分享的是成为架构师需要掌握的技术知识点,尽量的完善,目前对标的是知名企业腾讯、阿里等等后端开发岗位。 今天更新的内容是从Linux高级互联网架构师知识点说起,基础的知识点今天在这里就不写出来了,有需要了解的朋友可以看看我之前的文章:https://www.toutiao.com/i6769094897262658056/ Linux高级互联网架构师专栏 目录: 一:源码分析专题 二:中间件开发专题 三、集群 四:Linux系统专题 五:性能与测试专题 六:运维统计专题 七:分布式架构专题 八:挑战网络性能极限DPDK专栏 九、全方位分析Linux内核代码专栏 文末附上整体的思路图 一:源码分析专题 源码阅读能力是提升技术必不可少的途径 1、Nginx源码 知识点包括:Nginx基础架构、HTTP架构、 进程间的通信机制、Nginx高级数据结构、slab共享内存、upstream机制设计 2、Redis源码 知识点包括:Redis存储系统原理、数据模型与键值映射、内存操作与磁盘同步、主从同步
  • 性能测试分析与性能调优诊断--史上最全的服务器性能分析监控调优篇
    一个系统或者网站在功能开发完成后一般最终都需要部署到服务器上运行,那么服务器的性能监控和分析就显得非常重要了,选用什么配置的服务器、如何对服务器进行调优、如何从服务器监控中发现程序的性能问题、如何判断服务器的瓶颈在哪里等 就成为了服务器性能监控和分析时重点需要去解决的问题了。 本文章节目录: 1 服务器的性能监控和分析 1.1、 Linux服务器的性能指标监控和分析 1.1.1 、 通过vmstat深挖服务器的性能问题 1.1.2 、 如何通过mpstat 分析服务器的性能指标 1.1.3 、 从lsof中能看到什么 1.1.4 、 如何通过free看懂内存的真实使用 1.1.5、 网络流量如何监控 1.1.6 、 nmon对Linux服务器的整体性能监控 1.1.7 、 如何通过top发现问题 1.1.8、 如何通过pidstat发现性能问题 1.2 、 Windows服务器的性能指标监控和分析 1.2.1、 Windows性能监视器 1.2.2、 Windows性能监视器下的性能分析 备注:作者的原创文章,转载须注明出处。原创文章归作者所有,欢迎转载,但是保留版权。对于转载了博主的原创文章,不标注出处的,作者将依法追究版权,请尊重作者的成果。 本文作者:张永清 文章选自 作者2020年初即将出版的《软件性能测试、分析与调优实践之路》一书。 1.1 、
  • 一次Dubbo拥堵的分析
    文章内容结构 第一部分介绍生产上出现Dubbo服务拥堵的情况,以及Dubbo官方对于单个长连接的使用建议。 第二部分介绍Dubbo在特定配置下的通信过程,辅以代码。 第三部分介绍整个调用过程中与性能相关的一些参数。 第四部分通过调整连接数和TCP缓冲区观察Dubbo的性能。 一、背景 生产拥堵回顾 近期在一次生产发布过程中,因为突发的流量,出现了拥堵。系统的部署图如下,客户端通过Http协议访问到Dubbo的消费者,消费者通过Dubbo协议访问服务提供者。这是单个机房,8个消费者3个提供者,共两个机房对外服务。 在发布的过程中,摘掉一个机房,让另一个机房对外服务,然后摘掉的机房发布新版本,然后再互换,最终两个机房都以新版本对外服务。问题就出现单机房对外服务的时候,这时候单机房还是老版本应用。以前不知道晚上会有一个高峰,结果当晚的高峰和早上的高峰差不多了,单机房扛不住这么大的流量,出现了拥堵。这些流量的特点是并发比较高,个别交易返回报文较大,因为是一个产品列表页,点击后会发送多个交易到后台。 在问题发生时,因为不清楚状态,先切到另外一个机房,结果也拥堵了,最后整体回退,折腾了一段时间没有问题了。当时有一些现象: (1)提供者的CPU内存等都不高,第一个机房的最高CPU 66%(8核虚拟机),第二个机房的最高CPU 40%(16核虚拟机)。消费者的最高CPU只有30%多
  • 性能测试知识问题整理(三)
    续上一篇《性能测试知识问题整理(二)》 二十一、Ramp-up配置有什么作用?为什么压力工具中TPS和响应时间曲线抖动过大不易于分析? 问题一:Jmeter中Ramp-up 配置有什么样的作用? Ramp-up 配置的时间是指启动所有配置的线程总数所用的时间,例如设置的线程总数为500,Ramp-up设置的时间为50s,意为:启动500个线程数需要50s,平均为每一秒启动10个线程。 另外整个压力持续时间Duration是包括Ramp-up的时间,很多人理解为是then hold load for的时间(线程全部启动完之后持续运行多长时间)。 设置ramp-up period 容易出现的问题 1.如果设置成零,Jmeter将会在测试的开始就建立全部线程并立即发送访问请求, 这样一来就很容易使服务器饱和,更重要的是会隐性地增加了负载,这就意味着服务器将可能过载,不是因为平均访问率高而是因为所有线程的第一次并发访问而引起的不正常的初始访问峰值。这种异常不是我们需要的,因此,确定一个合理的ramp-up period 的规则就是让初始点击率接近平均点击率。当然,也许需要运行一些测试来确定合理访问量。如果要使用大量线程,ramp-up period 一般不要设置成零。 注意:很多人把ramp-up设置成为0错误的理解成是秒杀测试,其实秒杀也是有个过程的,是指系统运行一段时间后的突然高并发
  • 2020年Linux的知识技术合集(基础入门到高级进阶)
    前言 本文介绍下Linux从入门到高级进阶的学习路线。 整个路线体系专注于服务器后台开发,知识点包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等等 资源列表: 1:linux零基础入门 2:linux服务器开发 3:架构师开发 4:linux内核 5:webrtc入门到精通 6:音视频FFmpeg 7:神器Git入门到精通 什么是Linux? Linux是一个操作系统软件。与Windows不同的是,Linux是一套开放源代码程序的、并可以自由传播的类Unix操作系统,它是一个支持多用户、多任务、多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。 Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。 linux零基础入门:如何快速入门,需要哪些知识点? 1:linux环境专栏 linux系统安装 linux开发环境ssh与Samba配置 linux开发环境Gcc配置 linux的命令操作8条目录操作与5条文件操作 2:shell 脚本编程案例 3:统计文件单词数量(文本操作) 状态机实现文件单词统计 4:实现通讯录(结构体) 通讯录实现的架构设计与需求分析
  • 性能测试常见瓶颈分析及调优方法
    性能分析与调优如何下手,先从硬件开始,还是先从代码或数据库。从操作系统(CPU调度,内存管理,进程调度,磁盘I/O)、网络、协议(HTTP, TCP/IP ),还是从应用程序代码,数据库调优,中间件配置等方面入手。 单一个中间件又分web中间件(apache 、IIS),应用中间件(tomcat 、weblogic 、webSphere )等,虽然都是中间件,每一样拎出来往深了学都不是一朝一夕之功。但调优对于每一项的要求又不仅仅是“知道”或“会使用”这么简单。起码要达到“如何更好的使用”。 常看到性能测试书中说,性能测试不单单是性能测试工程师一个人的事儿。需要DBA 、开发人员、运维人员的配合完成。但是在不少情况下性能测试是由性能测试人员独立完成的,退一步就算由其它人员的协助,了解系统架构的的各个模块对于自身的提高也有很大帮助,同时也更能得到别人的尊重。 再说性能调优之前,我们有必要再提一下进行测试的目的,或者我们进行性能测试的初衷是什么? 能力验证:验证某系统在一定条件具有什么样的能力。 能力规划:如何使系统达到我们要求的性能能力。 应用程序诊断:比如内存泄漏,通过功能测试很难发现,但通过性能测试却很容易发现。 性能调优:满足用户需求,进一步进行系统分析找出瓶颈,优化瓶颈,提高系统整体性能。 一般系统的瓶颈 性能测试调优需要先发现瓶颈,那么系统一般会存在哪些瓶颈:
  • Linux性能调优,看这一篇就够了
    调优是一件因地制宜的事情,生搬硬套可能适得其反。互联网企业,生产环境大多数都是linux操作系统,Linux服务器性能调优,是一个重要的课题。linux有成百上千的参数可以调整,对这些参数的理解,可以帮助我们更好的理解服务器工作的原理,帮助更快的找到瓶颈和解决问题。为了帮助理解,先上一个Linux网络收包图: DMA:是一种无需CPU的参与就可以让外设和系统内存之间进行双向数据传输的硬件机制。使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率中断:在传统模式下,收到一个网络包,CPU会产生一次硬中断,切换上下文来处理网络包。但是过多的中断会影响CPU的执行效率,所以就有来类似于中断聚合的机制或者软中断方式来处理,来提高效率。一般在硬件drvier层面作为应用运维基本上做不了优化,本文探讨的核心是kernel这个层面。特别注意,我们今天不讲TCP相关的原理,具体的细节可以自行google,我们直接上实战参数。backlogbacklog其实是一个连接队列,backlog大小包括半连接状态和全连接状态两种队列大小net.core.netdev_max_backlog上图中的 recv_backlog,进入网卡还没被内核协议栈处理的报文最大长度。所有网络协议栈的收包队列,网卡收到的所有报文都在 netdev backlog 队列中等待软中断处理
  • C/C++ Linux 后台服务器开发高级架构师学习知识路(架构师篇)
    @[前言: 小编从事c方面10多年的工作经验、今天跟大家分享一下我总结出来的一系列 C/C Linux后台服务器开发的学习路线。从Linux开发工程师-Linux后台开发工程师-Linux高级互联网架构师。 上篇写编跟大家分享从Linux开发工程师-Linux后台开发工程师的学习路线,知识点总结。 今天跟大家分享Linux高级互联网架构师学习路线及知识点总结: 首先想要成为高级架构师你得先熟练掌握上篇的知识点内容、然后再来学习掌握以下知识点内容。 一:源码分析 源码阅读能力是提升技术必不可少的途径 1、Nginx源码 包括:Nginx基础架构、HTTP架构、 进程间的通信机制、Nginx高级数据结构、slab共享内存、upstream机制设计 2、Redis源码 包括:Redis存储系统原理、数据模型与键值映射、内存操作与磁盘同步、主从同步,原子操作、底层IO实现解析 3、ZeroMQ源码 包括:消息模型 发布订阅/推拉模型、通信协议 inproc/ipc/tcp/pgm、性能分析与经典MQ对比、底层网络通信实现机制、zmq系统架构与实现原理 二:中间件开发 要有造轮子的能力,也要有不造轮子的觉悟,SDK是高级开发必须要有的封装能力 1、高性能组件 包括:如何设计内存池、高并发场景下的消息队列、协程框架的实现、手写线程池、异步请求池、连接池、 2、高并发网络IO 包括:select
  • 阿里P7 java架构师 springcloud、jvm、netty 、redis、数据结构、分布式高并发 视频 下载分享
    作为普通java码农,你是否因为日复一日地写着业务代码无法深入了解前沿技术而感到焦虑; 作为经验尚浅的架构负责人,你是否在为新项目如何做到高并发秒杀、熔断、限流而感到无所适从; 作为一个跳槽求职者,你是否因为面试官的“灵魂拷问”而感到自卑沮丧、无地自容? 如果你正经历上述情形,不妨从此刻开始系统学习一下MA士兵的java架构师课程,来自BATJ等一线大厂的技术大牛带你 增强内功、结合实操,深入浅出的完善各个技术体系!请关注我,私信了解! Java程序员应该掌握的底层知识 java程序员需要了解的底层知识第一课硬件和操作系统的底层知识操作系统之进程管理 Linux系统的内存映射 内核同步方法及用汇编启动内核 内存与IO,磁盘IO,网络IO 虚拟文件系统,文件描述符,IO重定向 内核中PageCache、mmap作用、java文件系统io、nio、内存中缓冲区作用 Socket编程BIO及TCP参数 C10K问题及NIO精讲和IO模型性能压测 网络编程之多路复用器及Epoll精讲 网络编程java API 实战多路复用器开发 全手写急速理解Netty模型及IO模型应用实战 Netty之IO模型开发本质手写部分实现推导篇 全手写基于Netty的RPC框架自定义协议,连接池 全手写基于Netty的RPC框架 协议编解码问题 粘包拆包与内核关系全手写基于Netty的RPC框架
  • 牛年最新干货!字节/阿里/腾讯Java技术经验面经总结
    新年牛气冲天 新的一年开始啦!希望阅读本文的人春风得意,点赞的人爱情甜蜜,转发的人大吉大利,评论的人依然好运气,祝大家牛年大吉,牛气冲天! 话又说回来,我自认为对于我们这个行业的从业者来说,进入互联网大厂才算是对职业生涯的一种肯定,我相信这也是绝大多数同行的目标。如果想一直在这个行业发展的话,我建议大家以大厂的技术来要求自己,全方面提高自己的职业竞争力。 因此,我想在这里跟大家分享BAT官方推送的Java技术经验,对你来说可以更好地了解各家技术侧重点在哪里,也能帮助你在面试时有针对性的梳理知识,请大家务必认真看完。 下文涉及到的学习资料,点击传送门 即可获取!! 字节跳动 字节跳动是一家非常年轻也很优秀的互联网公司,旗下产品包含:今日头条,抖音,懂车帝等等,主要语言是Python/Golang,但对于Java开发来说也是不错的选择。 面试重点(技术侧重) 众所周知,字节是一家非常注重算法的公司,因此对于Java开发者来说,除了有扎实的Java基础,同时要具备不错的数据结构与算法功底。 数据结构与算法学习笔记 数据结构与算法 常用技术(NoSQL;消息队列;WEB组件) 技术深度(计算机原理;良好的数据结构与算法基础)技术经验(高并发服务设计和实现经验;优秀的设计和代码品味;扎实的编程能力;大流量高并发系统设计) 高并发系统设计 学习能力(较强的学习能力和求知欲;好奇心和进取心
  • Spark Streaming 实时计算在甜橙金融监控系统中的应用及优化
    1写在前面天翼电子商务有限公司(简称“甜橙金融”)是中国电信的全资子公司,2011 年 3 月成立于北京,作为中国人民银行核准的第三方支付机构,是兼具金融、电信、互联网文化的跨界国家高新技术企业。目前公司对实时性计算的需要及应用越来越多,本文选取了其中之一的 Spark Streaming 来介绍如何实现高吞吐量并具备容错机制的实时流应用。在甜橙金融监控系统项目中,需要对每天亿万级(10T)的日志记录进行实时的指标统计,在生产者一端,我们通过 Flume 将数据存入 Kafka 当中, 而在消费者一端,我们利用 Spark Streaming 从 Kafka 中不断的拉取数据进行指标统计并存入外部存储中。本文将从以下几个方面进行介绍,目的是带领大家对实时流处理有个初步的认识,一起交流学习。监控系统架构及存在的主要问题Spark Streaming 流处理框架介绍Streaming 相关的优化Streaming 任务的监控写在最后2监控系统架构及存在的主要问题系统架构介绍整个实时监控系统的架构是先由 Flume 收集服务器产生的日志 Log 和前端埋点数据, 然后实时把这些信息发送到 Kafka 分布式发布订阅消息系统,接着由 Spark Streaming 消费 Kafka 中的消息,同时消费记录由 Zookeeper 集群统一管理,这样即使 Kafka
  • 性能测试
    性能测试--Jmter 在学性能前先学会接口测试 http://www.ha97.com/5095.html 为什么要做性能测试? 评估系统性能指标、识别系统性能瓶颈,协助调优、指导突发流量承载方案的制定 用于系统运维成本的预算。 1)目前绝大多数应用都是基于网络的分布式应用,我们无法知道用户数量,用户场景的不确定性,系统测试时,不仅仅是功能,业务逻辑,接口测试,还要测试系统性能。一个用户没问题,但是用户一旦多了就可能出现各种各样的问题,所以需要进行系统性能测试。 2)用户数量增加,系统负债增加,进行系统性能测试,知道系统承受的并发用户数量,带宽是否够用,cpu是否够用,内存是否够用,硬盘速度是否跟得上。从服务端来看,测试服务器是否能承载用户多并发,系统是否稳定,从用户角度看响应时间速度。 什么是软件性能 它关注的不是软件是否能够完成特定的功能,而是在完成该功能时展示出来的及时性。通常我们会使用某些工具或手段来检测软件的某些指标是否达到了要求,这就是性能测试 不同群体眼中的性能 不同的人对于同一事物或问题的看法可能不同。对于软件性能也是如此,不同的人由于视角的不同,所关注的点也可能不同。下面来看看在不同的人群眼中性能分别是什么样的。 用户眼中的性能: 响应时间: ---还要让我等多久 稳定性: ----为什么总是失败 开发眼中的性能 架构设计: ------架构设计是否合理
  • Java架构百科大全——年薪50W必备的百科手册
    一、强化篇-修炼内功心法 1.1 夯实基础及原理 1.1.1 CoreJAVA 反射 初始反射-泛聊反射历史及机制原理理解JVM中Class字节码的生命周期Java中9大内置反射操作对象方法、字段、构造器的反射使用反射应用场景及实战总结 泛型 理解Java的自动装箱及拆箱泛型的正确使用方式何为泛型的类型擦除泛型使用中关于类型和限制的通配符理解泛型的实战场景和总结 集合 理解Java中集合体系结构及层次关系Collection体系Map体系 注解 理解注解给Java带来的优雅之道注解的本质及原理注解的使用场景及自主实现注解掌握注解和反射的搭配使用 其他工具类 HTTPDecodeAndEncodeJSONLog 1.1.2 JVM服务调优 JVM运行时数据区(Run-Time Data Areas) 方法区(Method Area)堆(Heap)虚拟机栈(Java Virtual Machine Stacks)程序计数器(The pc Register)本地方法栈(Native Method Stacks) 架构师思维带你认识JVM内存模型 (JMM) 内存模型跟运行时数据区不得不说的秘密对象创建过程推导内存模型为什么需要S区?只有Eden不行吗?为什么需要两个S区?体验与验证内存模型 阿里面试必问垃圾回收(GC) 如何确定一个对象是垃圾垃圾收集算法标记-清除(Mark-Sweep
  • 性能测试分析与性能调优诊断--史上最全的服务器性能分析监控调优篇
    性能测试分析与性能调优诊断--史上最全的服务器性能分析监控调优篇 from:https://www.cnblogs.com/laoqing/p/11629941.html 一个系统或者网站在功能开发完成后一般最终都需要部署到服务器上运行,那么服务器的性能监控和分析就显得非常重要了,选用什么配置的服务器、如何对服务器进行调优、如何从服务器监控中发现程序的性能问题、如何判断服务器的瓶颈在哪里等 就成为了服务器性能监控和分析时重点需要去解决的问题了。 本文章节目录: 1 服务器的性能监控和分析 1.1、 Linux服务器的性能指标监控和分析 1.1.1 、 通过vmstat深挖服务器的性能问题 1.1.2 、 如何通过mpstat 分析服务器的性能指标 1.1.3 、 从lsof中能看到什么 1.1.4 、 如何通过free看懂内存的真实使用 1.1.5、 网络流量如何监控 1.1.6 、 nmon对Linux服务器的整体性能监控 1.1.7 、 如何通过top发现问题 1.1.8、 如何通过pidstat发现性能问题 1.2 、 Windows服务器的性能指标监控和分析 1.2.1、 Windows性能监视器 1.2.2、 Windows性能监视器下的性能分析 备注:作者的原创文章,转载须注明出处。原创文章归作者所有,欢迎转载,但是保留版权。对于转载了博主的原创文章,不标注出处的
  • 记一次线上商城系统高并发的优化
    对于线上系统调优,它本身是个技术活,不仅需要很强的技术实战能力,很强的问题定位,问题识别,问题排查能力,还需要很丰富的调优能力。 本篇文章从实战角度,从问题识别,问题定位,问题分析,提出解决方案,实施解决方案,监控调优后的解决方案和调优后的观察等角度来与大家一起交流分享本次线上高并发调优整个闭环过程。 一 项目简要情况概述 该项目为基于SSM架构的商城类单体架构项目,其中有一个秒杀重磅模块,如下为当前线上环境的简要架构部署图,大致描述一下: (1)项目为SSM架构 (2)服务器类别:1台负载均衡服务器(F5),3台运用程序服务器,1台计时器服务器,1台redis服务器,1台图片服服务器和1台基于Pass架构的Mysql主从服务器(微软云) (3)调用逻辑:下图为简要调用逻辑 二 何为单体架构项目 从架构发展角度,软件项目经历了如下阶段的发展: 1.单体架构:可理解为传统的前后端未分离的架构 2.垂直架构:可理解为前后端分离架构 3.SOA架构:可理解为按服务类别,业务流量,服务间依赖关系等服务化的架构,如以前的单体架构ERP项目,划分为订单服务,采购服务,物料服务和销售服务等 4 微服务:可理解为一个个小型的项目,如之前的ERP大型项目,划分为订单服务(订单项目),采购服务(采购项目),物料服务(物料项目)和销售服务(销售项目),以及服务之间调用 三 本SSM项目引发的线上问题
  • 拉勾JAVA就业集训,拉勾java高级工程师高薪训练,从零玩转-Web全栈大神班
    什么是Spring? Spring是一个支持快速开发Java EE应用程序的框架。它提供了一系列底层容器和基础设施,并可以和大量常用的开源框架无缝集成,可以说是开发Java EE应用程序的必备。 Spring最早是由Rod Johnson这哥们在他的《Expert One-on-One J2EE Development without EJB》一书中提出的用来取代EJB的轻量级框架。随后这哥们又开始专心开发这个基础框架,并起名为Spring Framework。 随着Spring越来越受欢迎,在Spring Framework基础上,又诞生了Spring Boot、Spring Cloud、Spring Data、Spring Security等一系列基于Spring Framework的项目。本章我们只介绍Spring Framework,即最核心的Spring框架。后续章节我们还会涉及Spring Boot、Spring Cloud等其他框架。 Spring Framework Spring Framework主要包括几个模块: 支持IoC和AOP的容器;支持JDBC和ORM的数据访问模块;支持声明式事务的模块;支持基于Servlet的MVC开发;支持基于Reactive的Web开发;以及集成JMS、JavaMail、JMX、缓存等其他模块。 开源框架源码剖析 第一阶段
  • JVM调优与问题排查
    JVM 调优分类 调优是一个很大的概念,简单说就是把系统进行优化,但是站在系统的角度,我们一般把jvm条又分为三部分: 1.JVM预调优 2.调优JVM 运行环境(慢、卡顿等) 3.解决JVM中的问题(OOM、CPU飙升等) 调优中,现象最明显的是 OOM,因为有异常抛出,当然它也只是作为调优的一部分。预调优和优化运行环境估计很多人做的就是服务器重启而已。前一篇文章调优就是JVM内存结构调优的一种方式。 JVM 预调优 业务场景设定 调优是要分场景的,所以一定要明显你调优项目的场景设定,像现在大家都是微服务架构了,服务拆分出来以后更加适合做场景设定。 比如这个服务就注重吞吐量,这个服务注重用户的体验(用户的响应时间)等等。 无监控不调优 这里的监控指的是压力测试,能够看到结果,有数据体现的,不要用感觉去优化,所有的东西一定要有量化的指标,比如吞吐量,响应时间,服务器资源,网络资源等等。总之一句话,无监控不优化。 处理步骤 计算内存需求 计算内存需求,内存不是越大越好,对于一般系统来说,内存的需求是弹性的,内存小,回收速度快也能承受。所以内存大小没有固定的规范。虚拟机栈的大小在高并发情况下可以变小。 元空间(方法区)保险起见还是设定一个最大的值(默认情况下元空间是没有大小限制的),一般限定几百 M 就够用了,为什么说还限定元空间。 举例子:一台 8G 的内存的服务器