CPU 使用率过高问题排查

文章目录

  • CPU 使用率过高问题排查
    • 1. CPU使用率过高常见问题
    • 2. 压力测试
      • 2.1 stress
        • 安装
        • 参数说明
        • 测试示例
      • 2.2 stress-ng
        • 安装
        • 参数说明
        • 测试示例
    • 3. 问题排查
      • 3.1 使用 top 命令
      • 3.2 使用 ps 命令
      • 3.3 使用 perf top
      • 3.4 vmstat 命令
        • 常用信息
        • 内存信息
        • 磁盘信息

CPU 使用率过高问题排查

1. CPU使用率过高常见问题

  1. 无法SSH连接

  2. 操作卡顿

  3. 用户访问服务响应失败,超时

2. 压力测试

2.1 stress

stress 是一款简单但功能强大的工具,可对 Linux 系统施加可配置的 CPU、内存、I/O 或磁盘压力。通过模拟繁重的工作负载,系统管理员可以观察系统在压力下的表现反应。

这一工具的价值在于找出系统潜在的薄弱环节,确保系统能够在不影响性能的情况下处理繁重的任务。

stress-ng:

stress-ngstress 的扩展版本,它超越了前者的基本功能,提供的压力测试范围更广,不仅包括 CPU、内存、I/O 和磁盘压力,还包括对进程间通信、套接字和各种文件操作的额外测试。

stressstress-ngLinux 系统的前瞻性管理都有很大帮助,使管理员和程序员能够优化系统配置、识别潜在问题并提高系统的整体可靠性

安装

使用 stress 命令进行压力测试,这个命令需要单例安装

可参考文档:https://blog.csdn.net/cronaldo91/article/details/131214903

  • 使用 yum 安装
yum install -y epel-release.noarch && yum -y update
yum install -y stress stress-ng
  • 源码安装

源码地址:https://fossies.org/linux/privat/stress-ng-0.17.08.tar.gz/

在这里插入图片描述

参数说明

参考:https://blog.csdn.net/qq_34777982/article/details/137334439

[root@105 ~]# stress --help
`stress' imposes certain types of compute stress on your systemUsage: stress [OPTION [ARG]] ...-?, --help         show this help statement--version      show version statement-v, --verbose      be verbose-q, --quiet        be quiet-n, --dry-run      show what would have been done-t, --timeout N    timeout after N seconds--backoff N    wait factor of N microseconds before work starts-c, --cpu N        spawn N workers spinning on sqrt()-i, --io N         spawn N workers spinning on sync()-m, --vm N         spawn N workers spinning on malloc()/free()--vm-bytes B   malloc B bytes per vm worker (default is 256MB)--vm-stride B  touch a byte every B bytes (default is 4096)--vm-hang N    sleep N secs before free (default none, 0 is inf)--vm-keep      redirty memory instead of freeing and reallocating-d, --hdd N        spawn N workers spinning on write()/unlink()--hdd-bytes B  write B bytes per hdd worker (default is 1GB)Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10sNote: Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size).
参数说明
-c–cpu N: 产生 N 个进程,每个进程都反复不停的计算随机数的平方根;
-i–io N: 产生 N 个进程,每个进程反复调用 sync() 将内存上的内容写到硬盘上;
-m–vm N: 产生 N 个进程,每个进程不断分配和释放内存;
–vm-bytes B指定分配内存的大小;
–vm-stride B不断的给部分内存赋值,让 COW(Copy On Write)发生;
–vm-hang N指示每个消耗内存的进程在分配到内存后转入睡眠状态 N 秒,然后释放内存,一直重复执行这个过程;
–vm-keep一直占用内存,区别于不断的释放和重新分配(默认是不断释放并重新分配内存);
-d–hadd N: 产生 N 个不断执行 write 和 unlink 函数的进程(创建文件,写入内容,删除文件);
–hadd-bytes B指定文件大小;
-t–timeout N: 在 N 秒后结束程序;
–backoff N等待N微妙后开始运行;
-q–quiet: 程序在运行的过程中不输出信息;
-n–dry-run: 输出程序会做什么而并不实际执行相关的操作;
–version显示版本号
-v–verbose: 显示详细的信息
测试示例
  • CPU压测
# stress 消耗 CPU 资源是通过调用 sqrt() 函数(计算由 rand() 函数产生的随机数的平方根)实现。命令会产生 8 个这样的子进程不断计算,超时时间为20秒,结束后再次运行 uptime 比较平均负载
stress --cpu 8 --timeout 20# 启动 8 个 sqrt() 子进程,超时时间 30s,同时显示有关操作的详细信息
stress --cpu 8 -v --timeout 30s
  • 内存测试
# 产生 8 个子进程,超时时间 20s,每个进程不断分配和释放内存
stress --vm 8 --timeout 20s# 产生 2 个子进程,每个进程分配 2048M 内存
stress --vm 2 --vm-bytes 2048M --vm-keep --timeout 20s
  • IO测试
# 产生 8 个进程,每个进程都反复调用 sync() 函数将内存上的内容写到硬盘上
stress -i 8 --timeout 20s# 产生 1 个进程不断的在磁盘上创建 10M 大小的文件并写入内容
# 使用 top 命令查看 CPU 的状态(此时的 CPU 主要消耗在内核态),iostat 2 输出,高 iowait,瓶颈是写磁盘
stress -d 1 --hdd-bytes 10M --timeout 20s# 执行多个类型的任务,比如产生 4 个 CPU 进程、3 个 IO 进程、2 个 256M 的 vm 进程,并且每个 vm 进程中循环分配释放内存:
stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --vm-keep --timeout 20s

2.2 stress-ng

stress-ng 完全兼容 stress, 并且在此基础上通过几百个参数,可以产生各种复杂的压力

安装
yum install stress-ng
参数说明
-h,--help:显示帮助信息;--version:显示版本信息;-t,–timeout:指定程序运行结束的时间,后面直接跟数字,单位为秒;-c,–-cpu:后面空格跟一个整数,表示测试CPU的进程数,--cpu 4 :表示生成4个worker循环调用sqrt()产生cpu压力;-i,--io:后面空格跟一个整数,表示测试磁盘I/O的进程数, --io 4 :表示生成4个worker循环调用sync()产生io压力;-m,--vm:后面空格跟一个整数,表示测试内存的进程数,--vm 4 :表示生成4个worker循环调用malloc()/free()产生内存压力;-d,--hdd:后面空格直接跟数字,表示产生执行write和unlink函数的进程数,用于磁盘负载测试;--cpu-method:指定CPU的测试方法,后面空格直接跟方法名;--metrics:输出命令执行指标;--vm-bytes:指定在内存测试时malloc的字节数,默认256M;--class:指定测试类别,后面空格跟类别名;--matrix:启用矩阵测试模式,后面空格跟矩阵模式名;--random-seed:指定测试随机种子,后面空格跟种子名;--sequential:启用顺序测试模式;--hdd-bytes:指定写的字节数;--cpu-load:CPU负载占比,后面空格直接跟数字,单位为百分比;
测试示例
  • CPU测试
# 使用 4 个 CPU 进程数,进行矩阵乘法计算以进行压力测试,持续时间为20秒
stress-ng --cpu 4 --cpu-method matrixprod --timeout 20s# 产生 2 个 worker 做圆周率算法压力
stress-ng -c 2 --cpu-method pi --timeout 20s# 产生 2 个 worker 迭代使用 30 多种不同的压力算法,包括pi, crc16, fft等等
stress-ng -c 2 --cpu-method all --timeout 20s# 产生 2 个 worker 调用 socket 相关函数产生压力
stress-ng --sock 2 --timeout 20s# 产生 2 个 worker 读取 tsc 产生压力
stress-ng --tsc 2 --timeout 20s# 将压力指定到特定的cpu 0上
stress-ng --tsc 2 --taskset 0 --timeout 20s
  • 内存测试
# 用 4 个内存分配进程, 每次分配大小512M,分配后不释放,保持测试20秒
stress-ng --vm 4 --vm-bytes 512M --timeout 20s
  • IO测试
# 使用 4 个 IO 进程 ,保持测试20秒
stress-ng --io 4 --timeout 20s
  • 磁盘IO压测
# 使用 4 个I/O进程, 1 个写进程,每次写1G 文件块,测试20秒
stress-ng --io 4 --hdd 1 --hdd-bytes 1G --timeout 20s

3. 问题排查

3.1 使用 top 命令

  • top 命令简介
  1. 命令选项
参数说明
-b以批处理模式操作
-c显示完整的治命令
-d屏幕刷新间隔时间
-I忽略失效过程
-s保密模式
-S累积模式
-i<时间>设置刷新间隔时间
-u<用户名>指定用户名
-p<进程号>指定进程
-n<次数>循环显示的次数
  1. 在该命令中常用快捷键
参数说明
h显示快捷键帮助
k终止一个进程
i开/关忽略闲置和僵死进程
q退出程序
r重新安排一个进程的优先级别
S切换到累计模式
s更改刷新间隔时间,单位秒
f,F从当前显示中添加或者删除项目
o,O改变显示项目的顺序
l切换显示平均负载和启动时间信息
m切换显示内存信息
t切换显示进程和CPU状态信息
c切换显示命令名称和完整命令行
M根据内存使用大小排序
P根据CPU使用率进行排序 (默认排序)
T根据时间/累计时间进行排序
w将当前设置写入~/.toprc文件中
1展开多核cpu显示
  1. 说明

在这里插入图片描述

参数说明
top -系统当前时间
up系统已开机多长时间
user当前用户数
load averagecpu平均负载,三个数值分别为,1分钟,5分钟,15分钟
Tasks系统当前进程数,total:总进程数,running:正在运行的进程数,sleeping:睡眠的进程数,stopped:停止的进程数,zombie:僵尸进程数
%Cpu(s)cpu使用率 us:(user)用户使用cpu百分百,sy:(system)系统内核使用cpu百分百,ni:(niced)运行已调整优先级的用户进程的CPU时间,id:剩余的cpu百分百,wa:(IO wait)用于等待IO完成的CPU时间,hi:处理硬件中断的CPU时间,si: 处理软件中断的CPU时间,st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)
Mem内存使用信息,total:总内存大小,free:空闲的内存,used:已使用的内存,buff/cache:缓存的内存大小
Swap虚拟内存信息
PID进程id
USER进程所有者
PR优先级
NInice值,负值表示高优先级,正值表示低优先级
VIRT进程使用的虚拟内存总量
RES进程使用的物理内存大小
SHR共享内存大小
S进程状态,D:不可中断的睡眠状态,R:运行,S:睡眠,T:跟踪/停止,Z:僵尸进程
%CPU进程使用的CPU占用百分比
%MEM进程使用的物理内存百分比
TIME+进程使用的CPU时间总计
COMMAND命令名

在这里插入图片描述

3.2 使用 ps 命令

ps aux --sort=-%cpu | head -n 10参数说明:ps aux			可以用来查看进程的 CPU 内存使用情况--sort=-%CPU	以参数%CPU进行降序排列,升序排列可使用 --sort=+%CPU,同理也可以使用 %MEM 参数进行排序head -n 10		取前10行

在这里插入图片描述

3.3 使用 perf top

它能够实时显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数

在这里插入图片描述

第一行包含三个数据,分别是采样数(Samples)、事件类型(event)和事件总数量(Event count)

第一列 Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示。

第二列 Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。

第三列 Object ,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。

最后一列 Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示

3.4 vmstat 命令

是一个常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数

CPU 上下文切换,就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。

而这些保存下来的上下文,会存储在系统内核中,并在任务重新调度执行时再次加载进来。这样就能保证任务原来的状态不受影响,让任务看起来还是连续运行。

常用信息
# 每隔5秒输出一组数据,一共输出5组
[root@105 ~]# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
10  0     64 388948   4172 1305068    0    0    23    44   35   18  1  0 99  0  08  0     64 388932   4172 1305068    0    0     0     0 1837  211 100  0  0  0  08  0     64 388932   4172 1305068    0    0     0     0 1777  206 100  0  0  0  08  0     64 388932   4172 1305068    0    0     0     0 1772  206 100  0  0  0  08  0     64 388932   4172 1305068    0    0     0     1 1775  207 100  0  0  0  0
  • 参数说明
参数说明
r运行队列中进程数量
b等待IO的进程数量
swpd使用虚拟内存大小
free可用内存大小
buff用作缓冲的内存大小(是内核缓冲区用到的内存,对应的是 /proc/meminfo 中的 Buffers 值)
cache用作缓存的内存大小(是内核页缓存和 Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached 与 SReclaimable 之和。(有遇到过些系统是Cached 与 Slab之和,具体还以自己系统为准))
si每秒从交换区写到内存的大小
so每秒写入交换区的内存大小
bi每秒读取的块数(现在的Linux版本块的大小为1024bytes)
bo每秒写入的块数(现在的Linux版本块的大小为1024bytes)
in每秒中断数,包括时钟中断。【interrupt】
cs每秒上下文切换数。 【count/second】
us用户进程执行时间(user time)
sy系统进程执行时间(system time)
id空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。
wa等待IO时间

注:

  1. 如果 r 经常大于 4,id 经常少于 40,表示 cpu 的负荷很重。
  2. 如果 bi,bo长期不等于 0,表示内存不足。
  3. 如果 disk 经常不等于 0 ,且在 b 中的队列大于 3 ,表示 io 性能不好。
  4. Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。

在这里插入图片描述

内存信息
[root@105 ~]# vmstat -s1867044 K total memory168700 K used memory623160 K active memory639964 K inactive memory389004 K free memory4172 K buffer memory1305168 K swap cache1048572 K total swap64 K used swap1048508 K free swap871742 non-nice user cpu ticks190 nice user cpu ticks46726 system cpu ticks57724331 idle cpu ticks3661 IO-wait cpu ticks0 IRQ cpu ticks3668 softirq cpu ticks0 stolen cpu ticks13153817 pages paged in25607239 pages paged out11 pages swapped in20 pages swapped out21641981 interrupts10865763 CPU context switches1716926093 boot time64048 forks

注:这些信息的分别来自于 /proc/meminfo,/proc/stat/proc/vmstat

在这里插入图片描述

磁盘信息
[root@105 ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------total merged sectors      ms  total merged sectors      ms    cur    sec
sr0       18      0    2056     316      0      0       0       0      0      0
sda    44509     22 26305578  419857 116587  12097 51219286 2593733      0     89
dm-0   43003      0 26218018  416346 128402      0 51040550 2808927      0     87
dm-1     145      0    6616     112     20      0     160      61      0      0

注:这些信息主要来自于 /proc/diskstats

在这里插入图片描述

显示指定磁盘分区统计信息

[root@105 ~]# vmstat -p /dev/sda1
sda1          reads   read sectors  writes    requested writes1182      73488        252     178576

注:这些信息主要来自于 /proc/diskstats

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一篇 逻辑门(与门、或门、非门、异或门)

一、实验目的 了解DE1-SOC开发板一些外设。 掌握常用组合逻辑门电路的基本原理。 学习Verilog HDL的基本语法。 学习使用ModelSim工具对设计的电路进行仿真&#xff0c;包括编写Testbench仿真代码&#xff0c;以及ModelSim工具的使用。 熟悉使用Quartus软件从创建Quartus工…

算法金 | Python 中有没有所谓的 main 函数?为什么?

​大侠幸会&#xff0c;在下全网同名[算法金] 0 基础转 AI 上岸&#xff0c;多个算法赛 Top [日更万日&#xff0c;让更多人享受智能乐趣] 定义和背景 在讨论Python为何没有像C或Java那样的明确的main函数之前&#xff0c;让我们先理解一下什么是main函数以及它在其他编程语言…

javaweb——js

JavaScript是一种网页脚本语言。JavaScript代码可以很容易的嵌入到HTML页面中。 js引入 JavaScript嵌入到HTML页面中 <body><script>alert("Hello JS")</script> </body>再HTML页面中插入外部脚本JavaScript <body><script src&…

GIS数据快捷共享发布工具使用时注意事项

我们所有工具软件下载解压后&#xff0c;不要放在C盘或桌面&#xff0c;这样会产生权限冲突问题问题&#xff0c;这是WINDOWS的安全保护&#xff0c;大家要注意&#xff01;也不要让解压目录嵌套太深&#xff0c;Windows目录长度识别是有一定限制的!如果可以&#xff0c;最好是…

微收付系统让客户有钱花,让商家有钱赚!

微收付系统让客户有钱花&#xff0c;让商家有钱赚&#xff01; 作者按&#xff1a;随着那场呼啸全球的疫情&#xff0c;谜一样的消失&#xff01;给全球经济带来了沉重的打击&#xff0c;经济不振和战争笼罩着世界每一个角落&#xff0c;实体店面临着收款难&#xff0c;有钱人花…

C语言 数组——数组的其他应用之筛法求素数

目录 数组的其他应用 求100以内的所有素数 筛法求100以内的所有素数 自顶向下、逐步求精设计算法 数组的其他应用 求100以内的所有素数 筛法求100以内的所有素数 自顶向下、逐步求精设计算法 step 1&#xff1a;设计总体算法  初始化数组a&#xff0c;使a[2]2, a[3]3,..…

Flink系列六:Flink SQl 之常用的连接器(Connector)

一、动态表 & 连续查询(Continuous Query) 1、动态表&#xff08;Dynamic Tables&#xff09; 当流中有新数据到来&#xff0c;初始的表中会插入一行&#xff1b;而基于这个表定义的SQL查询&#xff0c;就应该在之前的基础上更新结果。这样得到的表就会不断地动态变化&…

SQL Developer 导入CSV数据

之前已经写过一篇文章&#xff1a;将文本文件导入Oracle数据库的简便方法&#xff1a;SQL Developer 本文是类似的&#xff0c;只不过使用的是官方提供的 CSV文件&#xff0c;确实是标准的CSV&#xff08;comma separated values&#xff09;。 COL1,COL2,COL3 "e40a9db…

2024年文艺文化与社会发展国际会议(ICLCSD 2024)

2024年文艺文化与社会发展国际会议 2024 International Conference on Literature, Culture and Social Development 【1】会议简介 2024年文艺文化与社会发展国际会议是一场汇集全球文艺文化和社会科学领域精英的盛会。本次会议以“文艺文化与社会发展”为主题&#xff0c;旨在…

[Java基础揉碎]坦克大战 java事件处理机制

目录 坦克大战游戏演示 ​编辑 为什么要写这个项目 java绘图坐标体系 java绘图技术 Graphics的常用方法 // 画直线 ​编辑 // 画矩形边框 // 画填充矩形 // 画填充椭圆 // 获取图片资源 // 写字 绘出坦克 新建一个tankgame包, 新建一个类Tank, 里面包含横…

01_初识微服务

文章目录 一、微服务概述1.1 什么是微服务1.2 对比微服务架构与单体架构1.3 微服务设计原则1.4 微服务开发框架1.5 简单理解分布式部署与集群部署 二、微服务的核心概念2.1 服务注册与发现2.2 微服调用&#xff08;通信&#xff09;2.3 服务网关2.4 服务容错2.5 链路追踪参考链…

CSAPP Lab04——Cache Lab大师手笔,匠心制作

浮沉浪似人潮 哪会没有思念 你我伤心到 讲不出再见 ——讲不出再见 完整代码见&#xff1a;CSAPP/cachelab-handout at main SnowLegend-star/CSAPP (github.com) Part A: Cache Simulator 这个lab描述背大锅&#xff0c;开始我是真有点没看懂题目的描述。特别是“M 20,1”“…

构建大型语言模型(LLM)产品的实战指南

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

基于多尺度相关小波分解的单幅图像去雾和去噪方法(MATLAB)

小波变换具有优美的数学背景和强大的多分辨率分析能力。它集成和发展了短时傅里叶变换的思想并克服了其时间窗口不可变的缺点。小波变换通过使用具有局部感受野和多尺度的基函数。形成了同时具有局部和全局性质的信号表征。与DCT等全局变换相比&#xff0c;小波变换可以防止局部…

Java面试八股之Executors可以创建哪几种类型的线程池

Executors可以创建哪几种类型的线程池 newSingleThreadExecutor&#xff1a; 创建一个单线程的线程池&#xff0c;此线程池确保所有的任务都在同一个线程中按顺序执行。适用于需要保证任务顺序执行&#xff0c;或者在单线程中运行的任务。 newFixedThreadPool&#xff1a; …

每日两题 / 34. 在排序数组中查找元素的第一个和最后一个位置 33. 搜索旋转排序数组(LeetCode热题100)

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 根据二分函数&#xff0c;得到>target和<target的两个&#xff0c;分别是答案的l和r class Solution { public:vector<int> searchRange(vector<int>& nums,…

Python | Leetcode Python题解之第130题被围绕的区域

题目&#xff1a; 题解&#xff1a; class Solution:def solve(self, board: List[List[str]]) -> None:if not board:returnn, m len(board), len(board[0])que collections.deque()for i in range(n):if board[i][0] "O":que.append((i, 0))board[i][0] &q…

github有趣项目:Verilog在线仿真( DigitalJS+edaplayground)

DigitalJS https://github.com/tilk/digitaljs这个项目是一个用Javascript实现的数字电路模拟器。 它旨在模拟由硬件设计工具合成的电路 像 Yosys&#xff08;这里是 Github 存储库&#xff09;&#xff0c;它有一个配套项目 yosys2digitaljs&#xff0c;它可以转换 Yosys 将文…

【多视图聚类】COMPLETER:Incomplete Multi-view Clustering via Contrastive Prediction

CVPR 2021 0.摘要 在本文中&#xff0c;我们研究了不完全多视图聚类分析中的两个具有挑战性的问题&#xff0c;即i&#xff09;如何在没有标签的帮助下学习不同视图之间的信息性和一致性表示&#xff0c;以及ii&#xff09;如何从数据中恢复缺失的视图。为此&#xff0c;我们…

英伟达开源新利器NV-Embed向量模型,基于双向注意力的LLM嵌入模型,MTEB 56项任务排名第一

前言 文本嵌入模型能够将文本信息转化为稠密的向量表示&#xff0c;并在信息检索、语义相似度计算、文本分类等众多自然语言处理任务中发挥着关键作用。近年来&#xff0c;基于解码器的大型语言模型 (LLM) 开始在通用文本嵌入任务中超越传统的 BERT 或 T5 嵌入模型&#xff0c…