当前位置: 首页 > news >正文

网络性能及IO性能测试工具

文章目录

    • 简介
    • IO性能
      • pidstat
      • iostat
      • fio
      • blktrace
    • 网络性能
      • ipef
      • trek

简介

网络性能和IO性能测试工具在现代计算环境中至关重要。无论是评估网络带宽、优化数据传输速度,还是检测磁盘读写性能,选择适合的工具至关重要。本文将介绍各种网络性能和IO性能测试工具,帮助您深入了解其功能、用途和如何选择最佳工具。

IO性能

pidstat

pidstat -d 1 #整体情况
pidstat -dt -p 73739 1 pidstat -d 1 #获取 pid 后可使用下面的命令观测该进程的所有线程的IO占用情况

pidstat -dt -p 73739 1

iostat

1.简介

iostat工具会对系统的磁盘操作活动进行监视,同时也会打印CPU的使用情况。

2.安装

iostat属于sysstat软件包,如果系统没有安装则通过 yum install sysstat/apt-get install sysstat 来安装。

3.主要参数

-c  仅显示CPU使用情况-d  仅显示设备利用率-k  显示状态以千字节每秒为单位,而不使用块每秒-m  显示状态以兆字节每秒为单位-p  仅显示块设备和所有被使用的其他分区的状态-t  显示每个报告产生时的时间,并显示终端和CPU的信息-C 显示CPU使用情况-N 显示磁盘阵列(LVM) 信息-n 显示NFS 使用情况-x 显示详细信息

4.常用命令
iostat -xm 1
5.应用

场景:监控磁盘是否有延时
1. 查看磁盘 qbd30 使用信息。
命令 iostat -xm qbd30 3 12 表示监测磁盘 qbd30 ,打印详细信息并以 MB/s 为单位,每 3s 打印一次,打印 12 次。
开启监控后还需要去使用磁盘,这里可以和fio命令结合使用。[root@rhel69 ~]# iostat -xm qbd30 3 12
Linux 2.6.32-696.el6.x86_64 (rhel69)    11/17/2022      _x86_64_        (4 CPU)avg-cpu:  %user   %nice %system %iowait  %steal   %idle0.12    0.00    0.30    5.35    0.81   93.42Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
qbd30             0.00    36.75    4.11   13.39     0.25     0.35    70.16     2.70  154.27  400.26   78.71   8.82  15.43avg-cpu:  %user   %nice %system %iowait  %steal   %idle0.00    0.00    0.00    0.00    2.96   97.04Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
qbd30             0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00avg-cpu:  %user   %nice %system %iowait  %steal   %idle0.80    0.00    4.49    3.53    9.46   81.72Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
qbd30             0.00     0.00    0.00 1312.33     0.00     5.13     8.00    15.57   11.66    0.00   11.66   0.20  26.67
...如果不想关系cpu,仅想关系磁盘可以添加 -b 参数;也可以利用 nohup 把监测放在后台执行,并把输出重定向到文件中,方便统计。
如:
[root@rhel69 yyl]# nohup iostat -xdm qbd30 6 25 > /home/yyl/iostat_qbd30 &%user : cpu 在用户模式占用时间比
%nice : cpu 在带Nice值(进程优先级)的用户模式占用的时间比
%system : cpu 在系统模式占用的时间比
%iowait : cpu 等待输入输出完成占用的时间比
%idle : cpu空闲时间百分比rrqm/s: 每秒完成的读请求合并数
wrqm/s: 每秒完成的写请求合并数
r/s:  每秒完成的读请求次数
w/s:  每秒完成的写请求次数
rsec/s:  每秒读扇区数
wsec/s: 每秒写扇区数
rMB/s:  每秒读取的字节数. 单位 MB/s
wMB/s:  每秒写入的字节数. 单位 MB/s
avgrq-sz:平均每次I/O操作的扇区数.
avgqu-sz:平均I/O队列长度.
await:  平均每次I/O操作的等待时间 (毫秒).
r_await:平均每次读I/O操作的等待时间 (毫秒)
w_await:平均每次写I/O操作的等待时间 (毫秒)
svctm: 每次I/O请求,磁盘读或写操作执行的时间 (毫秒). (该值不可靠)
%util:  I/O 请求发送到设备期间,占用 CPU 时间的百分比。如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置 那么%util=80%。这里需要监控磁盘是否有延时,则需要关心 await 和 %iowait 这两个值。

fio

1.简介

fio 是用来测试磁盘IO,和对磁盘进行压力测试的工具,也可以一定程度上观测到是磁盘读写是否存在延时。

2.安装
①.下载源码后,解压。执行 ./configure; make; make install
②.yum install fio
3. 常要参数

--name:测试任务名称。
--filename:测试设备的路径
--bs :单次io的块文件大小
--rw :定义测试时的读写策略。 常用的值有:randread(随机读),randwrite(随机写),read(顺序读),write(顺序写),randrw(混合随机读写)
--iodepth :定义测试时的IO队列深度,默认为1
--direct : 是否使用direct IO,值为1表示是
--size :定义测试IO操作的数据量,若未指定runtime这类参数,fio会将指定大小的数据量全部 读/写完成,然后才停止测试
--runtime :定义测试时间。如果未配置,则持续将size指定的文件大小,以每次bs值为分块大小读/ 写完。
--ioengine : 值为libaio表示异步模式,值为sync表示同步模式

4.常用命令


4k随机写 :fio --name=pool/vol_linux_release3-4k-write-16-b --filename=/dev/qbd/pool/vol_linux_release3 --bs=4k --iodepth=64 --rw=randwrite --ioengine=libaio --direct=1 --runtime=2h
4k随机读 :fio --name=pool/vol_linux_release3-4k-write-16-b --filename=/dev/qbd/pool/vol_linux_release3 --bs=4k --iodepth=64 --rw=randread --ioengine=libaio --direct=1 --runtime=2h

5.应用

场景:测试磁盘pool/vol_linux_release3,以异步方式、随机写、采用direct IO、单次块大小为 4K、运行时间为 2h[root@rhel69 ~]# fio --name=pool/vol_linux_release3-4k-write-16-b --filename=/dev/qbd/pool/vol_linux_release3 --bs=4k --iodepth=64 --rw=randwrite --ioengine=libaio --direct=1 --runtime=2h
pool/vol_linux_release3-4k-write-16-b: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=64
fio-2.19
Starting 1 process
Jobs: 1 (f=1): [w(1)][100.0%][r=0KiB/s,w=37.5MiB/s][r=0,w=9582 IOPS][eta 00m:00s]
pool/vol_linux_release3-4k-write-16-b: (groupid=0, jobs=1): err= 0: pid=25034: Thu Nov 17 12:40:42 2022write: IOPS=6697, BW=26.2MiB/s (27.5MB/s)(157GiB/6145178msec)slat (usec): min=4, max=37766, avg=47.91, stdev=179.91clat (usec): min=122, max=96761, avg=9501.69, stdev=5645.79lat (usec): min=640, max=96783, avg=9549.60, stdev=5646.54clat percentiles (usec):|  1.00th=[ 2416],  5.00th=[ 3664], 10.00th=[ 4320], 20.00th=[ 5216],| 30.00th=[ 6048], 40.00th=[ 6880], 50.00th=[ 7904], 60.00th=[ 9152],| 70.00th=[10688], 80.00th=[12992], 90.00th=[17024], 95.00th=[20608],| 99.00th=[29312], 99.50th=[33024], 99.90th=[42240], 99.95th=[46336],| 99.99th=[56064]lat (usec) : 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.02%lat (msec) : 2=0.49%, 4=6.86%, 10=58.44%, 20=28.53%, 50=5.64%lat (msec) : 100=0.03%cpu          : usr=4.06%, sys=14.36%, ctx=49956556, majf=2, minf=27IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%issued rwt: total=0,41156608,0, short=0,0,0, dropped=0,0,0latency   : target=0, window=0, percentile=100.00%, depth=64Run status group 0 (all jobs):WRITE: bw=26.2MiB/s (27.5MB/s), 26.2MiB/s-26.2MiB/s (27.5MB/s-27.5MB/s), io=157GiB (169GB), run=6145178-6145178msec在输出中
IOPS : 每秒 I/O 的次数
BW : 磁盘吞吐量。(总传输量/总耗时) (157GiB/6145178msec)
slat (usec):将I/O 发送到内核的消耗的时间。 (usec)表示单位微秒
clat (usec):I/O提交到Kernel到IO完成返回之间的时间。
lat (usec): avg(slat) + avg(clat) =~ avg(lat)lat (usec) : 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.02%
表示
0.01%的I/O 请求在 250 微秒内完成,0.01% 的I/O 请求在 250 微秒到 500 微秒之间完成 [250,500),依次类推。
上面的输出中 58.44% 的请求都在 [4,10) 毫秒之间完成的。有0.03%的请求都超过了100ms。

blktrace

1.简介
Blktrace 是针对 Linux 内核中 Block IO 的跟踪工具,它可以监测一个 IO 请求各个阶段的耗时情况。
2.安装
apt-get install blktrace
3.blktrace 记录的一次io请求生命周期

Q------->G------------>P--------->I------>M------>U------------------->D----------------------------->CQ : IO handled by request queue code; 准备发起IO请求(此时还没有请求)
G : Get request ; 生成IO请求
P : Plug request ;插入请求
I : IO inserted onto request queue ; 将IO请求插入到请求队列
M : IO back merged with request on queue ;合并请求
U : Unplug request ;合并完成后取出请求
D : IO issued to driver ;将IO请求发送给设备
C : IO completion ; 完成请求(设备处理结束)https://linux.die.net/man/1/blkparse

4.常用命令

1.blktrace 采集磁盘io
blktrace /dev/qbd30    #可同时采集多个 如blktrace /dev/qbd30 /dev/qbd02. blkparse 分析已采集的信息,并以文件输出
blkparse -i qbd30 -d qbd30.blktrace.bin3.btt 协助分析
btt -i qbd30.blktrace.bin

5.应用

场景:监控磁盘qbd301. 使用前先要挂载debugfs
mount -t debugfs debugfs /sys/kernel/debug2. 先采集磁盘使用情况(采集过程中需要使用被采集磁盘)
blktrace /dev/qbd30   #可同时采集多个 如blktrace /dev/qbd30 /dev/qbd03.采集结束后会在当前文件下生成多个文件。名为qbd30.blktrace.[cpuid]
[root@rhel69 ~]# ls -l qbd30.*
-rw-r--r--. 1 root root  799968 Nov 18 17:09 qbd30.blktrace.0
-rw-r--r--. 1 root root  151848 Nov 18 17:09 qbd30.blktrace.1
-rw-r--r--. 1 root root    3848 Nov 18 17:09 qbd30.blktrace.2
-rw-r--r--. 1 root root 4510336 Nov 18 17:09 qbd30.blktrace.34.生成的文件可以用blkparse查看,但是输出内容太多,不便分析建议生成一个二进制文件再用 btt 分析
[root@rhel69 ~]# blkparse -i qbd30 -d qbd30.blktrace.bin
[root@rhel69 ~]# ls qbd30.blktrace.bin
qbd30.blktrace.bin5.利用 btt 协助分析
[root@rhel69 ~]# btt -i qbd30.blktrace.bin
==================== All Devices ====================ALL           MIN           AVG           MAX           N
--------------- ------------- ------------- ------------- -----------Q2Q               0.000659491   0.000990258   0.008431694       15888
Q2G               0.000000590   0.000000970   0.000021513       15889
G2I               0.000000899   0.000001310   0.000031724       15889
I2D               0.000001726   0.000002859   0.000034533       15889
D2C               0.000639059   0.000959647   0.008373098       15888
Q2C               0.000642936   0.000964786   0.008378853       15888==================== Device Overhead ====================DEV |       Q2G       G2I       Q2M       I2D       D2C
---------- | --------- --------- --------- --------- ---------(250,480) |   0.1006%   0.1358%   0.0000%   0.2963%  99.4673%
---------- | --------- --------- --------- --------- ---------Overall |   0.1006%   0.1358%   0.0000%   0.2963%  99.4673%
[...]Q2G:生成IO请求耗费的时间G2I:IO请求放入到请求队列耗费的时间I2D:IO请求发送给磁盘设备耗费的时间D2C:磁盘设备处理IO请求耗费的时间Q2C:整个IO请求耗费的总时间
通过btt的信息,得知处理IO的时间,99.4673%都花费在D2C的过程。------------------
#blktrace -d /dev/qbd30 -o - | blkparse -i -    可以在shell实时查看
blkparse 输出信息的解释250,480  3        2     0.000020396  1486  Q  WS 297144200 + 8 [fio]
250,480  3        3     0.000021184  1486  G  WS 297144200 + 8 [fio]
250,480  3        4     0.000021945  1486  P   N [fio]
250,480  3        5     0.000022339  1486  I  WS 297144200 + 8 [fio]
250,480  3        6     0.000024168  1486  U   N [fio] 1
250,480  3        7     0.000025124  1486  D  WS 297144200 + 8 [fio]
250,480  3        8     0.000921274 27859  C  WS 297144200 + 8 [0]第一列 250,480: 为主设备,次设备号
[root@rhel69 ~]# ls -l /sys/dev/block/ | grep qbd30
lrwxrwxrwx 1 root root 0 Nov 17 20:31 250:480 -> ../../devices/virtual/block/qbd30第二列 3 :为cpuid第三列 2 :为序列ID第四列  0.000020396 :为时间偏移第五列  0.000020396 :发起本次IO的进程ID第六列  Q :IO进行到了那一步 (对应上面的生命周期)第七列  WS :Rwbs输出 ,R 代表 read 、W 表示 write、D 表示 块设备 discard 操作 、B 表示 barrier 操作、S 同步操作。第八列 297144200 + 8 :Offset + Size第九列 [fio] :表示发起IO请求进程名称

网络性能

ipef

1.简介
iperf可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失.
2.安装
①.官网下载对应的安装包 https://iperf.fr/iperf-download.php 安装
②. yum install iperf / apt-get install iperf
3.主要参数

Server or Client:-p, --port                设置监听或连接的端口-f, --format              输出时的单位: K, M, G, T-i, --interval            输出打印的间隔时间-F, --file name           指定传输的文件--logfile f               输出到指定的文件-B, --bind host           绑定网卡(指定数据包从那张网卡经过)Server specific:-s, --server              以server运行-D, --daemon              作为守护进程Client specific:-R, --reverse         以反向模式运行(服务器发送,客户端接收)-c, --client              以 client 运行,连接到 server-u, --udp                 使用 UDP (默认TCP)--connect-timeout         连接超时 (ms)-t, --time                设定传输时间间隔,单位 secs (默认 10 secs)-4, --version4            only use IPv4-6, --version6            only use IPv6  

4.常用命令

# 服务器端  iperf3 -s
# 客户端    iperf3 -c <server ip>
-------
# 单服务器多网卡指定特定网卡
# 服务器 iperf3 -B <本机网卡的ip地址> -s
# 客户端 iperf3 -B <本机网卡的ip地址> -c <server ip>

5.应用

场景:如想知道终端 A 和终端 B 之间网络带宽或排查物理网络是否有延时。
举例:neonsan06 为终端 A 作为 server 端;rhel69 为终端 B 作为 client 端。1. server 端开启监听。 -s 表示它是 server 端。root@neonsan06:~# iperf3 -s -p 13145 -f M
-----------------------------------------------------------
Server listening on 13145
-----------------------------------------------------------2.client端 去连接 server 端,-c 表示它是 client 端后面接 server 端的 ip 地址。[root@rhel69 yyl]# /usr/local/bin/iperf3 -c 192.168.112.156 -i 1 -p 13145 -f M
Connecting to host 192.168.112.156, port 13145
[  5] local 192.168.122.114 port 49310 connected to 192.168.112.156 port 13145
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   258 MBytes   257 MBytes/sec   22    269 KBytes
[  5]   1.00-2.00   sec   269 MBytes   270 MBytes/sec    0    283 KBytes
[  5]   2.00-3.00   sec   246 MBytes   246 MBytes/sec    0    294 KBytes
[  5]   3.00-4.00   sec   276 MBytes   276 MBytes/sec    0    307 KBytes
[  5]   4.00-5.00   sec   282 MBytes   282 MBytes/sec    0    321 KBytes
[  5]   5.00-6.00   sec   292 MBytes   292 MBytes/sec    0    337 KBytes
[  5]   6.00-7.00   sec   267 MBytes   267 MBytes/sec    0    349 KBytes
[  5]   7.00-8.00   sec   329 MBytes   329 MBytes/sec    0    389 KBytes
[  5]   8.00-9.00   sec   332 MBytes   332 MBytes/sec    0    457 KBytes
[  5]   9.00-10.00  sec   332 MBytes   332 MBytes/sec   72    474 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  2.81 GBytes   288 MBytes/sec   94             sender
[  5]   0.00-10.00  sec  2.81 GBytes   288 MBytes/sec                  receiveriperf Done.
--------------------------------------------------
上面输出中:
Interval表示时间间隔。
Transfer表示时间间隔里面转输的数据量。
Bandwidth是时间间隔里的传输速率。
Retr表示需要重新发送的TCP报文数,该值大于0的值表示包丢失如何判断网络是否存在问题?
测试所得的传输速率(Bitrate)在正常的情况下应该接近于网卡带宽。
如上面测试中neonsan06是万兆网卡(10000Mb/s), 它测试正常值应该接近 10 Gbits/sec 才算正常。
上面输出中距离 10 Gbits/sec 这个相差太大,由此可以判断网络是存在问题的, 此时可以再用 “iperf3 -c 192.168.112.156 -R”测试下行速率。

trek

trex是cisco开源的一款基于dpdk的发包工具,可以模拟各种类型的网络流量进行测试。
https://trex-tgn.cisco.com/trex/doc/trex_manual.html
1.安装
按手册内容来,需要注意的是,mellanox网卡必须用centos 7.9, 并且需要安装ofed

# OFED 安装
# Modify the variable to desired Mellanox OFED version
MOFED_VERSION=5.2-2.2.0.0
# Modify the variable to desired OS
#MOFED_OS=ubuntu20.04
MOFED_OS=rhel7.9
curl -fSsL https://www.mellanox.com/downloads/ofed/MLNX_OFED-${MOFED_VERSION}/MLNX_OFED_LINUX-${MOFED_VERSION}-${MOFED_OS}-x86_64.tgz | tar -zxpf -
cd MLNX_OFED_LINUX-*
./mlnxofedinstall
# 这里会提示很多依赖没安装,按要求都装上,然后重装几次就可以完成

trex 解压了就行,无需安装。

2.配置说明

  1. trex 设计初是2个端口互相收发,所以要求有偶数个端口才可以启动。可以增加个’dummy‘端口来解决这个问题。
  2. threads 是收发线程可以使用的cpu核,要跟master/latency线程分开
  3. 目标报文mac都是default_gw的mac,所以目标ip跟default_gw要相同

cat /etc/trex_cfg.yaml
- port_limit      : 2version         : 2
#List of interfaces. Change to suit your setup. Use ./dpdk_setup_ports.py -s to see available optionsinterfaces    : ["00:09.0", 'dummy']port_info       :  # Port IPs. Change to suit your needs. In case of loopback, you can leave as is.- ip         : 192.168.0.2default_gw : 192.168.0.3- ip         : 192.168.0.3default_gw : 192.168.0.3platform :master_thread_id  : 0latency_thread_id : 1dual_if   :- socket   : 0threads  : [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

3.编辑测试脚本
trex自带了很多例子,基于stl/udp_for_benchmarks.py改一下,就是发包压测脚本。

# cat stl/udp_for_benchmarks.py
from trex_stl_lib.api import *
import argparse# Tunable example
#
#trex>profile -f stl/udp_for_benchmarks.py
#
#Profile Information:
#
#
#General Information:
#Filename:         stl/udp_for_benchmarks.py
#Stream count:          1
#
#Specific Information:
#Type:             Python Module
#Tunables:         ['stream_count = 1', 'direction = 0', 'packet_len = 64']
#
#trex>start -f stl/udp_for_benchmarks.py -t  packet_len=128 --port 0
#class STLS1(object):'''Generalization of udp_1pkt_simple, can specify number of streams and packet length'''def create_stream (self, packet_len, stream_count):packets = []for i in range(stream_count):sport=1025 + ibase_pkt = Ether()/IP(src="192.168.0.2",dst="192.168.0.3")/UDP(dport=12,sport=sport)base_pkt_len = len(base_pkt)base_pkt /= 'x' * max(0, packet_len - base_pkt_len)packets.append(STLStream(packet = STLPktBuilder(pkt = base_pkt),mode = STLTXCont(pps = 1200000)))return packetsdef get_streams (self, tunables, **kwargs):parser = argparse.ArgumentParser(description='Argparser for {}'.format(os.path.basename(__file__)),formatter_class=argparse.ArgumentDefaultsHelpFormatter)parser.add_argument('--packet_len',type=int,default=64,help="The packets length in the stream")parser.add_argument('--stream_count',type=int,default=12,help="The number of streams")args = parser.parse_args(tunables)# create 1 streamreturn self.create_stream(args.packet_len - 4, args.stream_count)# dynamic load - used for trex console or simulator
def register():return STLS1()

4.启动测试
需要两个ssh终端

  1. 启动服务, 其中 -c 10 表示用10个核,./t-rex-64 -c 10 -f /etc/trex_cfg.yaml -i.
  2. 在另一个终端使用console启动测试
[root@i-bse38fxo v2.88]# ./trex-consoleUsing 'python3' as Python interpeterConnecting to RPC server on localhost:4501                   [SUCCESS]Connecting to publisher server on localhost:4500             [SUCCESS]Acquiring ports [0]:                                         [SUCCESS]Server Info:Server version:   v2.88 @ STL
Server mode:      Stateless
Server CPU:       1 x QEMU Virtual CPU
Ports count:      1 x 25Gbps @ MT27800 Family [ConnectX-5 Virtual Function]-=TRex Console v3.0=-Type 'help' or '?' for supported actionstrex>start -f stl/udp_for_benchmarks.py

4.这时可以在服务终端看到统计信息。这个测试是在pekt3的vm里面运行的,由于hyper是10G网卡,此时已经达到线速。

-Global stats enabledCpu Utilization : 7.3  %  20.1 Gb/corePlatform_factor : 1.0Total-Tx        :       7.37 GbpsTotal-Rx        :      38.24  bpsTotal-PPS       :      14.39 MppsTotal-CPS       :       0.00  cpsExpected-PPS    :       0.00  ppsExpected-CPS    :       0.00  cpsExpected-BPS    :       0.00  bpsActive-flows    :        0  Clients :        0   Socket-util : 0.0000 %Open-flows      :        0  Servers :        0   Socket :        0 Socket/Clients :  -nanTotal_queue_full : 1522870939drop-rate       :       7.37 Gbpscurrent time    : 518.1 sectest duration   : 0.0 sec

5.停止测试: 在console里面输入stop
参考文档
https://netdevconf.info/0x14/session.html?talk-test-your-limits-with-trex-traffic-generator
https://mp.weixin.qq.com/s/qg6S6ONkl46CmxLbjzx-WA

相关文章:

网络性能及IO性能测试工具

文章目录 简介IO性能pidstatiostatfioblktrace 网络性能ipeftrek 简介 网络性能和IO性能测试工具在现代计算环境中至关重要。无论是评估网络带宽、优化数据传输速度&#xff0c;还是检测磁盘读写性能&#xff0c;选择适合的工具至关重要。本文将介绍各种网络性能和IO性能测试工…...

1+X应急响应(网络)常见网络攻击-SQL注入:

常见网络攻击-SQL注入&#xff1a; SQL注入概述&#xff1a; 动态网站的工作流程&#xff1a; SQL注入的起源&#xff1a; SQL典型的攻击手段&#xff1a; SQL注入的危害&#xff1a; SQL注入的函数&#xff1a; SQL注入类型&#xff1a; 提交方式分类&#xff1a; Get注入&am…...

流式上传与分片上传的原理与实现

&#x1f680; 博主介绍&#xff1a;大家好&#xff0c;我是无休居士&#xff01;一枚任职于一线Top3互联网大厂的Java开发工程师&#xff01; &#x1f680; &#x1f31f; 在这里&#xff0c;你将找到通往Java技术大门的钥匙。作为一个爱敲代码技术人&#xff0c;我不仅热衷…...

基于深度学习CNN算法的花卉分类识别系统01--带数据集-pyqt5UI界面-全套源码

文章目录 基于深度学习算法的花卉分类识别系统一、项目摘要二、项目运行效果三、项目文件介绍四、项目环境配置1、项目环境库2、环境配置视频教程 五、项目系统架构六、项目构建流程1、数据集2、算法网络Mobilenet3、网络模型训练4、训练好的模型预测5、UI界面设计-pyqt56、项目…...

【数电】常见组合逻辑电路设计和分析

1.基于数据选择器设计 1.1卡诺图降维 1.2实例分析 1.2.1例题一 1.2.2例题二 1.2.2例题三 2.基于译码器设计 3.参考资料 1.《数字电子技术基础 第六版》 阎石王红 2.卡诺图的降维_哔哩哔哩_bilibili...

攻防世界-web ics-06 [解法思路]

进入环境 点击左边的列表只有报表中心有反应 注意看url直接就是index.php?id1 我先试了sqlmap不行&#xff0c;然后就沉淀了一下 想到了id后面的参数问题&#xff0c;我谁便改了几个数都没反应 就想着用bp抓包爆一下这个参数&#xff0c;用了一个数字10000的字典 发现2333…...

传智杯 3-初赛:终端

题目描述&#xff1a; 有一天您厌烦了电脑上又丑又没用的终端&#xff0c;打算自己实现一个 Terminal。具体来说&#xff0c;它需要支持如下命令: 1. touch filename&#xff1a;如果名为 filename 的文件不存在&#xff0c;就创建一个这样的文件&#xff0c;如果已经存在同名…...

《数据结构》学习系列——图(中)

系列文章目录 目录 图的遍历深度优先遍历递归算法堆栈算法 广度优先搜索 拓扑排序定义定理算法思想伪代码 关键路径基本概念关键活动有关量数学公式伪代码时间复杂性 图的遍历 从给定连通图的某一顶点出发&#xff0c;沿着一些边访问遍图中所有的顶点&#xff0c;且使每个顶点…...

网络安全,文明上网(2)加强网络安全意识

前言 在当今这个数据驱动的时代&#xff0c;对网络安全保持高度警觉已经成为每个人的基本要求。 网络安全意识&#xff1a;信息时代的必备防御 网络已经成为我们生活中不可或缺的一部分&#xff0c;信息技术的快速进步使得我们对网络的依赖性日益增强。然而&#xff0c;网络安全…...

Laravel对接SLS日志服务

Laravel对接SLS日志服务&#xff08;写入和读取&#xff09; 1、下载阿里云的sdk #通过composer下载 composer require alibabacloud/aliyun-log-php-sdk#对应的git仓库 https://github.com/aliyun/aliyun-log-php-sdk2、创建sdk请求的service <?phpnamespace App\Ser…...

Kafka 工作流程解析:从 Broker 工作原理、节点的服役、退役、副本的生成到数据存储与读写优化

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…...

基于 Flink 的车辆超速监测与数据存储的小实战

基于 Flink 的车辆超速监测与数据存储的小实战 一、实战背景与目标 在智能交通管理领域&#xff0c;实时监控车辆行驶速度并精准识别超速行为对于保障道路交通安全和维护交通秩序具有至关重要的意义。本项目旨在构建一个高效的数据处理系统&#xff0c;能够从 Kafka 的 topic…...

Shell 脚本基础(7):重定向详解

内容预览 ≧∀≦ゞ Shell 脚本基础&#xff08;7&#xff09;&#xff1a;重定向详解声明1. 重定向基础概念1.1 输出重定向&#xff08;> 和 >>&#xff09;覆盖写入&#xff08;>&#xff09;追加写入&#xff08;>>&#xff09;输出到终端和文件&#xff0…...

04. 流程控制

一、流程控制 流程控制就是用来控制程序运行中各语句执行顺序的语句。基本的流程结构为&#xff1a;顺序结构&#xff0c;分支结构&#xff08;或称选择结构&#xff09;&#xff0c;循环结构。 顺序结构&#xff1a;程序自上到下执行&#xff0c;中间没有任何判断和跳转&…...

基于卡尔曼滤波器的 PID 控制

基于卡尔曼滤波器的PID控制算法结合了经典控制理论和现代信号处理技术。卡尔曼滤波器&#xff08;Kalman Filter, KF&#xff09;可以对噪声数据进行平滑处理&#xff0c;从而改善PID控制器的性能&#xff0c;特别是在处理具有噪声和不确定性的系统时。以下是详细的设计过程&am…...

基于信创环境的信息化系统运行监控及运维需求及策略

随着信息技术的快速发展和国家对信息安全的日益重视&#xff0c;信创环境&#xff08;信息技术应用创新环境&#xff09;的建设已成为行业发展的重要趋势。本指南旨在为运维团队在基于信创环境的系统建设及运维过程中提供参考&#xff0c;确保项目顺利实施并满足各项技术指标和…...

leetCode 283.移动零

题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums [0] 输出:…...

Kali Linux语言设置成中文

要将Kali Linux设置成中国地区&#xff08;简体中文&#xff09;&#xff0c;可以按照以下步骤进行操作&#xff1a; 一、更新软件包列表 打开Kali Linux的终端。 输入以下命令来更新软件包列表&#xff1a; sudo apt-get update 二、安装语言包&#xff08;如果有就不用安装了…...

c#窗体列表框(combobox)应用——省市区列表选择实例

效果如下&#xff1a; designer.cs代码如下&#xff1a; using System.Collections.Generic;namespace 删除 {public partial class 省市区选择{private Dictionary<string, List<string>> provinceCityDictionary;private Dictionary<string,List<string&…...

kali中信息收集的一些常用工具

这里只是代表个人所见&#xff0c;所以肯定会有其他的没提到&#xff0c;希望大家体谅 前言 信息收集分为主动和被动的 主动就是通过自己的机器去和对方比如通信后获得的数据 被动是指不是在自己这里获取的&#xff0c;可以是第三方平台获取到的&#xff0c;与目标没有通信 …...

【CS61A 2024秋】Python入门课,全过程记录P2(Week3开始,更新中2024/11/24)

文章目录 关于基本介绍&#x1f44b;Week 3Mon Environments阅读材料Lab 02: Higher-Order Functions, Lambda ExpressionsQ1: WWPD: The Truth Will PrevailQ2: WWPD: Higher-Order FunctionsQ3: WWPD: Lambda 关于 个人博客&#xff0c;里面偶尔更新&#xff0c;最近比较忙。…...

python学习笔记(8)算法(1)数组

一、数组 数组是存储于一个连续空间且具有相同数据类型的元素集合。若将有限个类型相同的变量的集合命名&#xff0c;那么这个名称为数组名。组成数组的各个变量称为数组的分量&#xff0c;也称为数组的元素&#xff0c;有时也称为下标变量。用于区分数组的各个元素的数字编号…...

C++(进阶) 第1章 继承

C&#xff08;进阶) 第1章 继承 文章目录 前言一、继承1.什么是继承2.继承的使用 二、继承方式1.private成员变量的&#xff08;3种继承方式&#xff09;继承2. private继承方式3.继承基类成员访问⽅式的变化 三、基类和派生类间的转换1.切片 四、 继承中的作⽤域1.隐藏规则&am…...

【Linux | 计网】TCP协议详解:从定义到连接管理机制

目录 1.TCP协议的定义&#xff1a; 2.TCP 协议段格式 3.TCP两种通信方式 4.确认应答(ACK)机制 解决“后发先至”问题 5.超时重传机制 那么, 超时的时间如何确定? 6.连接管理机制&#xff1a; 6.1.三次握手&#xff1a; 为什么需要3次握手&#xff0c;一次两次不行吗…...

SElinux学习

一、SElinux简介 SELinux是Security-Enhanced Linux的缩写&#xff0c;意思是安全强化的linux&#xff0c;传统的访问控制在我们开启权限后&#xff0c;系统进程可以直接访问.当我们对权限设置不严谨时&#xff0c;这种访问方式就是系统的安全漏洞。 所以在开启SElinux后 会…...

Spark核心组件解析:Executor、RDD与缓存优化

Spark核心组件解析&#xff1a;Executor、RDD与缓存优化 Spark Executor Executor 是 Spark 中用于执行任务&#xff08;task&#xff09;的执行单元&#xff0c;运行在 worker 上&#xff0c;但并不等同于 worker。实际上&#xff0c;Executor 是一组计算资源&#xff08;如…...

阿里云cdn配置记录和nodejs手动安装

cdn 登录阿里云 域名解析权限 开启cdn&#xff0c;接引导流程&#xff0c; 源可以设置 域名或者ip等 配置好域名解析 上传https证书 图片不显示&#xff0c;后端开发需要配置 回源配置的回源协议 &#xff0c;配置跟随客服端【如果浏览器多次重定向错误&#xff0c;客服或者改…...

【实战】基于urllib和BeautifulSoup爬取jsp网站的数据

文章目录 前言目标网站分析目标网页爬取数据解析导出数据其他问题处理分页检索及多关键字搜索去重cookie问题工具封装经验总结前言 网络数据爬取大致分为两类: 静态爬取:该种方式针对那种架构比较老的网站,使用模版方式,通过浏览器F12只能找到静态页面,找不到返回json数…...

cpp-httplib 框架

cpp-httplib 概述 主要特点 单文件库&#xff1a;cpp-httplib 是一个单文件头文件库&#xff0c;易于集成到现有项目中。你只需将 httplib.h 包含到项目中即可开始使用支持 HTTP 客户端和服务器&#xff1a;它不仅支持作为 HTTP 客户端发送请求&#xff0c;也支持构建 HTTP 服…...

GEE 案例——TVDI(Temperature Vegetation Dryness Index)指数

目录 简介 方法论 代码解释 函数 案例代码 单景影像的TVDI 影像集合批量计算TVDI 引用 结果 简介 本文中代码包含两个可用于计算 TVDI 的主要函数。其中一个函数用于仅根据一幅 NDVI 和一幅 LST 图像生成 TVDI(singleTVDI),另一个函数用于为多幅 NDVI 和多幅 LST …...

Java语言程序设计 选填题知识点总结

第一章 javac.exe是JDK提供的编译器public static void main (String args[])是Java应用程序主类中正确的main方法Java源文件是由若干个书写形式互相独立的类组成的Java语言的名字是印度尼西亚一个盛产咖啡的岛名Java源文件中可以有一个或多个类Java源文件的扩展名是.java如果…...

基于Springboot+Vue社区养老服务管理系统(源码+lw+讲解部署+PPT)

前言 详细视频演示 论文参考 系统介绍 系统概述 核心功能 用户角色与功能 具体实现截图 1. 服务信息查看功能 主要代码实现 截图&#xff1a; 2. 服务申请功能 主要代码实现 截图&#xff1a; 3. 公告信息查看功能 主要代码实现 截图&#xff1a; 4. 服务信息…...

Linux基本指令的使用

当然可以&#xff01;以下是一些常用的Linux指令及其示例&#xff1a; 1. ls 列出目录内容。 ls 显示当前目录下的文件和文件夹。 ls -l 以详细格式列出文件和文件夹的信息&#xff08;如权限、拥有者、大小等&#xff09;。 2. cd 改变当前目录。 cd /path/to/dire…...

Momenta C++面试题及参考答案

vtable 的创建时机 在 C 中&#xff0c;vtable&#xff08;虚函数表&#xff09;是在编译阶段创建的。当一个类包含虚函数时&#xff0c;编译器会为这个类生成一个 vtable。vtable 本质上是一个函数指针数组&#xff0c;其中每个元素指向一个虚函数的实现。这个表的布局是由编译…...

AI 在软件开发流程中的优势、挑战及应对策略

AI 在软件开发流程中的优势、挑战及应对策略 随着人工智能技术的飞速发展&#xff0c;AI大模型正在逐步渗透到软件开发的各个环节&#xff0c;从代码自动生成到智能测试&#xff0c;AI的应用正在重塑传统的软件开发流程。本篇文章将分析AI在软件开发流程中带来的优势&#xff0…...

langchain runnable

LangChain 文档详细解析 LangChain 是一个用于构建与语言模型&#xff08;如GPT-4&#xff09;交互的框架。本文档介绍了LangChain v0.1版本中的Runnable接口及其相关功能。 目录 Runnable接口输入和输出模式使用示例异步方法事件流并行处理 1. Runnable接口 为了简化自定义…...

nginx配置不缓存资源

方法1 location / {index index.html index.htm;add_header Cache-Control no-cache,no-store;try_files $uri $uri/ /index.html;#include mime.types;if ($request_filename ~* .*\.(htm|html)$) {add_header Cache-Control "private, no-store, no-cache, must-revali…...

Linux系统程序设计--4.进程

程序与进程 内核中的进程结构 task_struct(进程表项和进程控制块) 位于/usr/src/linux-headers-4.15.0-213-generic/include/linux/sched.h C程序启动过程 进程终止方式 进程终止函数 atexit 小案例 #include<stdio.h> #include<string.h> #include<stdlib…...

springboot/ssm网购平台管理系统Java在线购物商城管理平台web电商源码

springboot/ssm网购平台管理系统Java在线购物商城管理平台web电商源码 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&…...

2024年Android面试总结

2024年Android面试总结 1.动画类型有哪些&#xff1f;插值器原理&#xff1f; 2.StringBuffer和StringBuilder区别&#xff1f; 3.jvm内存模型&#xff1f; 4.线程池7大核心参数及原理&#xff1f; 5.Android多进程通信方式有哪些&#xff1f;各自的优缺点&#xff1f; 6…...

UE5 slate BlankProgram独立程序系列

源码版Engine\Source\Programs\中copy BlankProgram文件夹&#xff0c;重命名为ASlateLearning&#xff0c;修改所有文件命名及内部名称。 ASlateLearning.Target.cs // Copyright Epic Games, Inc. All Rights Reserved.using UnrealBuildTool; using System.Collections.Ge…...

小米PC电脑手机互联互通,小米妙享,小米电脑管家,老款小米笔记本怎么使用,其他品牌笔记本怎么使用,一分钟教会你

说在前面 之前我们体验过妙享中心&#xff0c;里面就有互联互通的全部能力&#xff0c;现在有了小米电脑管家&#xff0c;老款的笔记本竟然用不了&#xff0c;也可以理解&#xff0c;毕竟老款笔记本做系统研发的时候没有预留适配的文件补丁&#xff0c;至于其他品牌的winPC小米…...

家庭智慧工程师:如何通过科技提升家居生活质量

在今天的数字化时代&#xff0c;家居生活已经不再只是简单的“住”的地方。随着物联网&#xff08;IoT&#xff09;、人工智能&#xff08;AI&#xff09;以及自动化技术的快速发展&#xff0c;越来越多的家庭开始拥抱智慧家居技术&#xff0c;将他们的家变得更加智能化、便捷和…...

云计算-华为HCIA-学习笔记

笔者今年7月底考取了华为云计算方向的HCIE认证&#xff0c;回顾从IA到IE的学习和项目实战&#xff0c;想整合和分享自己的学习历程&#xff0c;欢迎志同道合的朋友们一起讨论&#xff01; 第二章&#xff1a;服务器基础 服务器是什么&#xff1f; 服务器本质上就是个性能超强的…...

webgl threejs 云渲染(服务器渲染、后端渲染)解决方案

云渲染和流式传输共享三维模型场景 1、本地无需高端GPU设备即可提供三维项目渲染 云渲染和云流化媒体都可以让3D模型共享变得简单便捷。配备强大GPU的远程服务器早就可以处理密集的处理工作&#xff0c;而专有应用程序&#xff0c;用户也可以从任何个人设备查看全保真模型并与…...

【中间件】Redis

一、什么是Redis Redis是一个开源&#xff08;BSD许可&#xff09;&#xff0c;内存存储的数据结构服务器&#xff0c;可用作数据库&#xff0c;高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合&#xff0c;位图&#xff0c;hyperloglogs等数据类型。内置…...

请结合给定资料中的具体事例,谈谈你对“海洋的污染将毁灭鱼儿的家园,但让人类不寒而栗的毁灭绝非仅此而已!”这句话的理解。(10分)

题目 【2010年国考省级以上&#xff08;含副省级&#xff09;申论真题】2&#xff0e;请结合给定资料中的具体事例&#xff0c;谈谈你对“海洋的污染将毁灭鱼儿的家园&#xff0c;但让人类不寒而栗的毁灭绝非仅此而已&#xff01;”这句话的理解。&#xff08;10分&#xff09…...

Java SE 与 Java EE:基础与进阶的探索之旅

在编程世界中&#xff0c;Java语言以其跨平台、面向对象、丰富的类库等特点&#xff0c;成为了众多开发者和企业的首选编程语言。而Java SE与Java EE&#xff0c;作为Java平台的两个重要组成部分&#xff0c;各自承载着不同的使命&#xff0c;同时又紧密相连&#xff0c;共同构…...

PH热榜 | 2024-11-24

DevNow 是一个精简的开源技术博客项目模版&#xff0c;支持 Vercel 一键部署&#xff0c;支持评论、搜索等功能&#xff0c;欢迎大家体验。 在线预览 1. AutoFlow Studio 标语&#xff1a;借助简化的AI质检&#xff0c;更快发布产品&#xff0c;更聪明地进行测试。 介绍&…...

LLM 系列学习教程

LLM101 检查 Tokenizer 词表大小与 LLM 的 Embedding 和 LM_head 输入大小是否匹配对 SBert 进行训练、预测、评估使其进行相似度计算对 BERT 进行训练、预测、评估使其进行文本分类使用 CLIP 模型进行文本图像匹配对 JoinBERT 进行训练、预测使其进行对话意图和槽位联合识别对…...