服务器架构和网络性能瓶颈分析
一、服务器的组成
1、服务器的类型
硬件服务器:性能好,价格贵,一般大公司,巨型项目会使用
云服务器:价格便宜,根据自己的需求进行调整服务器,如阿里云、腾讯云,目前使用最多
虚拟机:一般公司不会使用虚拟机作为项目的服务器,除非测试环境中,用于测试验证。性能最差。
2、硬件
硬件:CPU、内存条、磁盘、网卡
一个HTTP请求发送到服务器:先到网卡,网卡没有存储功能,会在内存的网络缓冲区暂时存储,然后通过总线告知CPU有网络数据来了,CPU再进行执行指令。
操作系统代码指令+数据是存储在磁盘里的,当网卡有数据来了,会把数据和指令加载到内存中,CPU从内存中读取对应的指令去执行。
一个请求过来服务器,会跟哪些部分有关系呢?
- 网卡(网络带宽不够)
- 内存(空间不足)
- CPU(资源不足)
- 磁盘(空间不足、读写速率不够)
3、软件
应用软件:为实现用户需求开发定制的功能软件,如:淘宝、微信等。
- 应用程序基于操作系统上运行的,作为一个进程运行
- 测试对象:应用软件
进程和线程的区别
进程:是操作系统层面,管理应用程序的一种单元,程序运行是以进程方式运行的
- 每个进程占用一个网络端口,如:8080、9100、9090、3000、8086等,操作系统通过这些端口(网络数据会携带端口请求),区分是哪个进程要处理哪些请求
- 端口是传输层端口,TCP、UDP端口,每个端口唯一标识一个进程,所以端口不能重复被占用
- 进程运行起来后的一些代码和数据是加载到内存里的(内存属于磁盘和CPU之间的桥梁)
- 每个进程运行起来之后,都需要分配一块内存,如果内存空间不足,进程就无法正常运行
进程是操作系统层面管理程序运行的单元,申请内存区域,绑定端口,代码指令加载等操作都必须在进程层面来实现
线程:本质上可以说一种更加轻量级的进程,一个进程可以管理多个线程,进程最终的数据是由线程来管理的。
- 线程可以由应用程序自己内湖控制,同一个进程内的多个线程共享内存资源使用
- 线程是没有端口的,一个进程下面有多个线程共享进程的端口号
- 线程可以作为操作系统层面的单独调用的资源,操作系统会把指令和数据以线程为单位分派给CPU去处理执行
- java项目一般都是以多线程来处理的
线程与进程的区别?
* 进程是操作系统层面管理程序运行的单元,程序是以进程方式运行的。申请内存区域、绑定端口、代码指令加载等操作,都必须要在进程层面来实现的
* 线程本质伤可以说是一种更加轻量级的进程,一个进程可以管理多个线程,进程最终的数据是由线程来管理的。线程可以由应用程序自己内部控制,同一个进程的多个线程共享端口和内存资源使用。
二、网络性能分析
请求和响应是通过网络进行传输的,如果发送的数据大于网络带宽,那么久会造成网络阻塞,从而形成网络瓶颈,所以我们需要在性能测试过程中,学会如何分析目前的性能测试环境里是否有网络瓶颈。
如果有网络的瓶颈,性能指标存在:
* TPS上不去:因为数据没有到服务器,服务器不能处理很多事务
* CPU/内存使用率不高:因为数据没有到服务器,不会消耗服务器的CPU和内存
* RT响应时间:很长
存在以上的指标问题,可能是网络瓶颈问题,但是也有可能是其他问题,需要具体分析
2.1 网络检测工具
iperf3:检查网速工具,是开源的网络性能测试工具,支持win、linux、mac平台,测试两个服务区之间的带宽速度的。
yum install iperf3
# 服务器和客户端都要安装,启动服务端,客户端可以发送指令测速
测试方法:
1)服务器启动
-
iperf3 -s ,启动成为服务器,默认占用段偶5201
-
参数,-s:表示服务器,-p:定义端口,iperf3 -s -p 5202;-i:设置每次报告之间的时间间隔,单位秒
2)客户端启动
-
常用参数
-c:表示服务器端的IP地址-p:表示服务器的端口号,如果服务器修改了端口,这里必须带上端口,默认的可以不加
-t:可以指定传输测试的持续时间,iperf在指定的时间内,重复发送指定长度的数据包,默认是10s
-i:设置每次报告之间的时间间隔,单位秒;如果设置为非零值,就会按照这个时间间隔输出测试报告,默认是1s
–logfile:输出的测试报告存储至文件中
-J:输出json格式测试报告
-R:反向输出,client负责发送数据,server负责接收,如果需要测试下载速度,则用-R
测试:iperf3 -c 192.168.16.130 -t 10 -i 1 【客户端160,向服务器161 发送数据,每隔1s发送一次请求,总共10s】
2.2 网络监控工具
iftop【interface top】:查看网络实时流量的工具,可以看到是谁占用了服务器的网络。
yum install -y iftop
# 在被测服务器上安装
- => <= 代表网络流量的流转方向
- TX 表示发送的总流量
- RX 表示接受的总流量
- TOTAL 表示总流量
- peak 表示每秒流量的峰值
- rates 分别表示过去2s 10s 40s的平均流量
三、网络性能分析和瓶颈调优思路
-
第一步:通过iperf3工具,测试服务器的网络带宽
-
第二步:压测观察网络使用情况的指标,跟服务器的带宽做对比;避免其他程序干扰的话,可以结合iftop工具实时监控【可以直接使用Prometheus直接对比;聚合报告对比需要换算下单位】
-
第三步:如果网络带宽用完了,说明可能存在网络瓶颈
-- 观察系统资源是否使用完成,如果其他资源利用率不是很高,网络带宽用完了,TPS上不去,就基本上是网络瓶颈问题 --如果其他的资源消耗完成,可以花钱升级机器,或者优化程序代码,优化完成后,再关注网络瓶颈问题
如果有网络瓶颈,应该怎么优化?
1. 提高性能测试环境的网络带宽,公司网络由两个部分决定:运营商的网络带宽+设备硬件网卡
2. 向运营商购买带宽
3. 更换设备网卡:10Mbps 100Mbps 1000Mbps,现在很多服务器都是万兆网卡或者千兆网卡,网卡本身的瓶颈是很少的
4. 优化程序:压缩数据传输的大小,比如响应消息字段设计简化;减少不必要的数据传输,不要的字段不返回传输