在机器监控中,CPU的监控指标确实非常多样化。以下是20多种重要的CPU指标及其作用:
-
CPU使用率(CPU Utilization)
作用:反映CPU整体负载情况,通常以百分比表示。 -
用户时间(User Time)
作用:显示CPU在用户模式下执行程序的时间比例。 -
系统时间(System Time)
作用:表示CPU在内核模式下执行操作的时间比例。 -
空闲时间(Idle Time)
作用:指示CPU处于空闲状态的时间比例。 -
I/O等待时间(I/O Wait Time)
作用:表示CPU等待I/O操作完成的时间比例。 -
中断时间(Interrupt Time)
作用:显示CPU处理硬件中断的时间比例。 -
软中断时间(Soft Interrupt Time)
作用:指示CPU处理软件中断的时间比例。 -
上下文切换率(Context Switch Rate)
作用:反映CPU在不同进程间切换的频率,高值可能表示过度调度。 -
运行队列长度(Run Queue Length)
作用:显示等待CPU执行的进程数量,反映CPU负载。 -
CPU温度(CPU Temperature)
作用:监控CPU的工作温度,防止过热。 -
时钟频率(Clock Speed)
作用:显示CPU当前的运行频率,反映性能状态。 -
指令执行速度(Instructions Per Cycle, IPC)
作用:衡量CPU执行指令的效率。 -
缓存命中率(Cache Hit Rate)
作用:反映CPU缓存的使用效率,影响整体性能。 -
分支预测命中率(Branch Prediction Hit Rate)
作用:衡量CPU分支预测的准确性,影响执行效率。 -
功耗(Power Consumption)
作用:监控CPU的能源消耗情况。 -
C-State占用率(C-State Residency)
作用:显示CPU在各种节能状态下的时间比例。 -
P-State分布(P-State Distribution)
作用:反映CPU在不同性能状态下的时间分布。 -
前端绑定(Front-End Bound)
作用:指示CPU指令获取和解码阶段的瓶颈程度。 -
后端绑定(Back-End Bound)
作用:反映CPU执行单元的饱和程度。 -
内存绑定(Memory Bound)
作用:显示CPU等待内存操作的时间比例。 -
核心间负载平衡(Core Load Balance)
作用:反映多核CPU中各核心负载的均衡程度。 -
超线程利用率(Hyper-Threading Utilization)
作用:显示CPU超线程技术的使用效率。 -
浮点运算性能(Floating Point Operations Per Second, FLOPS)
作用:衡量CPU执行浮点运算的速度。 -
向量指令使用率(Vector Instruction Usage)
作用:反映CPU高级指令集(如SSE、AVX)的使用情况。 -
页面错误率(Page Fault Rate)
作用:指示内存管理单元(MMU)处理页面错误的频率。
这些指标共同提供了CPU性能、效率和健康状况的全面视图。通过监控这些指标,系统管理员和开发人员可以:
- 识别性能瓶颈
- 优化应用程序和系统配置
- 预测和防止潜在的硬件问题
- 确保系统的稳定性和效率
- 进行容量规划和资源分配
在实际应用中,通常会根据具体需求和系统特性选择最相关的指标进行重点监控。
接着再介绍一些
非常好,让我们更深入地探讨Linux系统中的CPU监控指标,包括一些Linux特有的概念和关键点:
-
CPU使用率(CPU Utilization)
- 在/proc/stat文件中可以找到
- 包括user、nice、system、idle、iowait、irq、softirq等状态
- 使用top或htop命令可以实时查看
-
负载平均值(Load Average)
- 通过/proc/loadavg文件或uptime命令查看
- 显示1分钟、5分钟和15分钟的平均负载
- 理想情况下应小于CPU核心数
-
进程状态(Process State)
- 在/proc/[pid]/stat文件中可以看到详细信息
- 包括R(运行)、S(睡眠)、D(不可中断睡眠)、Z(僵尸)等状态
- ps命令可以显示进程状态
-
CPU时间分布(CPU Time Distribution)
- 使用mpstat命令可以查看详细的CPU时间分布
- 包括%usr、%sys、%idle、%iowait、%irq、%soft等
-
上下文切换(Context Switches)
- 在/proc/stat中的ctxt字段显示
- vmstat命令的cs列显示每秒上下文切换次数
- 高频率可能表示线程过多或CPU争用
-
中断请求(Interrupt Requests, IRQs)
- 在/proc/interrupts文件中可以看到详细信息
- 显示每个CPU核心处理的硬件中断数量
- 高IRQ可能表示硬件问题或驱动程序效率低下
-
软中断(Soft IRQs)
- 在/proc/softirqs文件中可查看
- 包括网络收发、定时器、调度等软中断类型
- 高软中断可能表示网络负载高或内核任务繁重
-
CPU频率调节(CPU Frequency Scaling)
- 在/sys/devices/system/cpu/cpu*/cpufreq/中可以查看和设置
- 包括当前频率、可用频率范围、调节策略等
- cpufreq-info命令可以显示详细信息
-
CPU温度(CPU Temperature)
- 通过lm-sensors包的sensors命令查看
- 或直接读取/sys/class/thermal/thermal_zone*/temp文件
- 高温可能导致CPU降频或系统不稳定
-
调度器统计(Scheduler Statistics)
- 在/proc/schedstat文件中可以看到详细的调度器统计信息
- 包括运行时间、等待时间、调度次数等
- 可以用于分析调度器效率和进程行为
-
CPU亲和性(CPU Affinity)
- 使用taskset命令可以查看和设置进程的CPU亲和性
- 在/proc/[pid]/status文件的Cpus_allowed字段中可以看到
- 用于优化多核系统的性能
-
NUMA统计(NUMA Statistics)
- 在支持NUMA的系统中,可以通过numastat命令查看
- 显示每个NUMA节点的内存使用情况
- 对于优化大型系统性能很重要
-
CPU缓存(CPU Cache)
- 可以通过/sys/devices/system/cpu/cpu*/cache/中的文件查看缓存信息
- 包括缓存大小、类型、共享情况等
- cachestat工具可以监控缓存命中率
-
CPU拓扑(CPU Topology)
- 在/sys/devices/system/cpu/中可以查看CPU拓扑信息
- lscpu命令提供了详细的CPU架构信息
- 对于理解和优化多核系统很重要
-
进程优先级和nice值(Process Priority and Nice Value)
- 通过ps命令的NI列或/proc/[pid]/stat文件查看
- nice和renice命令可以调整进程优先级
- 影响进程获得CPU时间的机会
-
实时进程统计(Real-time Process Statistics)
- 使用top命令的1键可以查看每个CPU核心的使用情况
- pidstat命令可以显示每个进程的CPU使用情况
- 有助于识别高CPU使用的进程
-
CPU瓶颈分析(CPU Bottleneck Analysis)
- 使用perf工具进行CPU性能分析
- 可以识别热点函数、缓存未命中等问题
- 对于深入优化应用程序性能很有用
-
虚拟化开销(Virtualization Overhead)
- 在虚拟化环境中,可以通过virt-top工具监控虚拟机的CPU使用
- KVM环境下可以查看/sys/kernel/debug/kvm/中的统计信息
- 有助于分析虚拟化带来的性能影响
-
CPU节能技术(CPU Power Saving Technologies)
- 通过cpupower命令可以查看和管理CPU节能特性
- 包括C-states和P-states的使用情况
- 影响CPU性能和能耗
-
系统调用统计(System Call Statistics)
- 使用strace命令可以跟踪进程的系统调用
- /proc/[pid]/syscall文件显示进程当前的系统调用
- 高频系统调用可能表示I/O密集型操作或低效的编程实践
-
CPU时间累计(CPU Time Accounting)
- /proc/[pid]/stat文件中包含进程的CPU时间累计信息
- 包括用户态时间、内核态时间、子进程时间等
- 用于分析进程的长期CPU使用情况
-
CPU带宽监控(CPU Bandwidth Monitoring)
- 在支持Intel RDT(Resource Director Technology)的系统上可用
- 通过pqos工具可以监控和控制CPU缓存和内存带宽使用
- 用于优化多租户环境下的资源分配
-
硬件性能计数器(Hardware Performance Counters)
- 通过perf stat命令可以访问CPU的硬件性能计数器
- 提供指令执行、缓存访问、分支预测等底层信息
- 对于深入性能优化和问题诊断非常有用
这些指标和工具共同提供了对Linux系统CPU使用情况的全面视图。通过监控和分析这些指标,系统管理员和开发人员可以:
- 精确定位性能瓶颈
- 优化系统和应用程序配置
- 进行高效的资源分配
- 预防潜在的系统问题
- 进行详细的性能调优
在实际应用中,通常需要结合多个指标进行综合分析,以获得对系统性能的全面理解。同时,根据具体的应用场景和系统特性,可能需要重点关注某些特定指标。
当然,我们可以继续深入探讨更多与Linux系统CPU监控相关的指标和概念:
-
CPU调度域(CPU Scheduling Domains)
- 在/proc/sys/kernel/sched_domain/中可以查看和配置
- 影响多核系统中的任务调度策略
- 对NUMA系统的性能优化特别重要
-
CPU隔离(CPU Isolation)
- 通过kernel参数isolcpus或cgroup可以实现
- 用于将特定CPU核心专门分配给关键任务
- 提高实时系统的响应性和确定性
-
调度器统计信息(Scheduler Statistics)
- /proc/sched_debug文件提供详细的调度器统计
- 包括运行队列长度、延迟统计、负载均衡信息等
- 用于分析和优化调度器性能
-
CPU时间片(CPU Time Slice)
- 通过sysctl kernel.sched_rr_timeslice_ms参数可以查看和调整
- 影响进程在被抢占前能连续运行的时间
- 调整可以平衡响应性和吞吐量
-
CPU使用率限制(CPU Usage Limiting)
- 使用cgroups的cpu子系统可以限制进程组的CPU使用
- 通过/sys/fs/cgroup/cpu/中的文件进行配置
- 用于资源隔离和多租户环境管理
-
CPU压力测试(CPU Stress Testing)
- 使用stress-ng工具可以进行CPU压力测试
- 模拟各种CPU负载情况,测试系统稳定性
- 有助于识别潜在的性能问题和硬件缺陷
-
CPU漏洞缓解(CPU Vulnerability Mitigation)
- /sys/devices/system/cpu/vulnerabilities/中显示CPU漏洞状态
- 如Spectre、Meltdown等漏洞的缓解措施可能影响性能
- 重要的安全考虑,但可能带来性能开销
-
CPU能耗事件(CPU Power Events)
- 通过turbostat工具可以监控CPU频率和能耗事件
- 显示C-states、P-states变化和能耗数据
- 用于优化系统能效和性能
-
实时调度统计(Real-time Scheduling Statistics)
- /proc/sched_rt_runtime_us和/proc/sched_rt_period_us控制实时任务的CPU使用
- 影响实时任务的调度行为和系统响应性
- 对实时系统的性能调优很重要
-
CPU热插拔(CPU Hotplug)
- 通过/sys/devices/system/cpu/cpu*/online文件可以动态开启或关闭CPU核心
- 用于动态调整系统性能和能耗
- 在虚拟化和云环境中特别有用
-
进程CPU亲和力历史(Process CPU Affinity History)
- 使用pidstat -p ALL -t命令可以查看进程的CPU亲和力历史
- 有助于分析长时间运行进程的CPU使用模式
- 用于优化多核系统的任务分配
-
CPU微码更新(CPU Microcode Updates)
- /proc/cpuinfo中的microcode字段显示当前CPU微码版本
- 微码更新可能影响CPU性能和功能
- 重要的安全和稳定性考虑因素
-
NUMA内存访问统计(NUMA Memory Access Statistics)
- 使用numastat -m命令可以查看详细的NUMA内存访问统计
- 显示本地和远程内存访问次数
- 对优化NUMA系统性能至关重要
-
CPU调度延迟(CPU Scheduling Latency)
- 使用ftrace或trace-cmd工具可以测量调度延迟
- 分析实时性能和系统响应能力
- 对低延迟系统的调优很有帮助
-
CPU频率调节器统计(CPU Frequency Governor Statistics)
- 在/sys/devices/system/cpu/cpufreq/中可以查看频率调节器的详细统计
- 包括频率变化次数、时间分布等
- 用于分析和优化动态频率调节策略
-
中断亲和性(Interrupt Affinity)
- 通过/proc/irq/*/smp_affinity文件可以设置中断的CPU亲和性
- 用于优化中断处理,避免单个CPU核心过载
- 对I/O密集型应用的性能优化很重要
-
CPU拓扑感知调度(CPU Topology Aware Scheduling)
- 内核调度器考虑CPU拓扑信息进行任务分配
- 可以通过调整sched_domain参数优化
- 提高缓存利用率和减少跨NUMA节点通信
-
CPU性能计数器溢出(CPU Performance Counter Overflow)
- 使用perf工具可以设置性能计数器溢出中断
- 用于精确分析特定事件(如缓存未命中)的发生
- 高级性能调优和问题诊断的有力工具
-
CPU调度器负载跟踪(CPU Scheduler Load Tracking)
- 内核使用负载跟踪机制来估计任务的CPU需求
- 影响任务在多核系统中的分配
- 通过sysctl参数可以调整负载跟踪行为
-
CPU束缚(CPU Pinning)
- 在虚拟化环境中,可以将虚拟CPU绑定到物理CPU核心
- 提高性能稳定性,减少VM间干扰
- 通过libvirt或hypervisor特定工具配置
这些额外的指标和概念进一步扩展了我们对Linux系统CPU监控和管理的理解。它们涵盖了从底层硬件特性到高级调度策略的各个方面,为系统管理员和性能工程师提供了丰富的工具和信息,以实现更精细的性能优化和问题诊断。
在实际应用中,选择合适的指标进行监控和分析取决于具体的系统配置、应用需求和性能目标。深入理解这些指标不仅有助于解决当前的性能问题,还能帮助设计更高效、更可靠的系统架构。
非常好,让我们继续深入探讨更多与Linux系统CPU相关的指标和概念:
-
CPU调度器运行队列统计(CPU Scheduler Runqueue Statistics)
- /proc/schedstat提供每个CPU的运行队列统计
- 包括运行时间、等待时间、任务数等
- 用于分析调度器效率和负载分布
-
CPU缓存一致性事件(CPU Cache Coherency Events)
- 通过perf可以监控如HITM(Hit Modified)等缓存一致性事件
- 高HITM率表示核心间频繁的缓存行共享,可能影响性能
- 对多核系统的性能优化很重要
-
CPU分支预测统计(CPU Branch Prediction Statistics)
- 使用perf可以收集分支预测命中和未命中次数
- 高未命中率可能导致严重的性能下降
- 用于优化代码结构和编译器选项
-
CPU前端绑定(CPU Front-End Bound)
- 表示CPU在获取和解码指令时的瓶颈
- 可通过perf和toplev工具分析
- 高前端绑定可能表示指令缓存未命中或分支预测问题
-
CPU后端绑定(CPU Back-End Bound)
- 指示CPU执行单元的饱和程度
- 同样可通过perf和toplev工具分析
- 高后端绑定可能表示内存延迟或计算密集型操作
-
CPU退休指令(CPU Retired Instructions)
- 表示成功执行完成的指令数量
- 可通过perf stat命令监控
- 用于评估CPU的有效工作量
-
CPU时钟调制(CPU Clock Modulation)
- 在/sys/devices/system/cpu/cpu*/thermal_throttle/中可查看
- 显示由于温度过高导致的CPU频率降低情况
- 对于诊断散热问题和性能下降很有用
-
CPU拓扑缓存(CPU Topology Cache)
- /sys/devices/system/cpu/cpu*/cache/中提供每个CPU核心的缓存信息
- 包括缓存大小、类型、共享情况等
- 对理解和优化缓存使用很重要
-
CPU调度器统计重置(CPU Scheduler Statistics Reset)
- 通过echo 0 > /proc/sched_debug可以重置调度器统计
- 用于在特定时间段内收集精确的调度器行为数据
- 有助于短期性能分析和问题诊断
-
CPU负载不平衡统计(CPU Load Imbalance Statistics)
- 在/proc/sched_debug中可以找到负载均衡相关统计
- 显示任务迁移次数、不平衡程度等
- 用于优化多核系统的负载分布
-
CPU调度域拓扑(CPU Scheduling Domain Topology)
- /proc/sys/kernel/sched_domain/中显示调度域的层次结构
- 影响任务在不同CPU核心间的迁移策略
- 对NUMA系统的性能优化特别重要
-
CPU能效偏好(CPU Energy Performance Preference)
- 在支持的硬件上,通过/sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference设置
- 允许在性能和能效之间进行权衡
- 影响CPU频率调节和功耗管理
-
CPU调度器等待时间(CPU Scheduler Wait Time)
- 通过/proc/[pid]/sched文件可以查看进程的调度等待时间
- 高等待时间可能表示CPU资源不足或调度不公平
- 用于识别和解决调度相关的性能问题
-
CPU频率不稳定性(CPU Frequency Instability)
- 使用turbostat或powertop工具可以监控CPU频率的变化
- 频繁的频率变化可能影响性能稳定性
- 对于需要稳定性能的应用很重要
-
CPU C-state残留时间(CPU C-state Residency Time)
- 通过/sys/devices/system/cpu/cpu*/cpuidle/中的文件可以查看
- 显示CPU在各种低功耗状态下停留的时间
- 用于分析和优化系统的能耗和响应性
-
CPU微操作融合统计(CPU Micro-op Fusion Statistics)
- 在支持的处理器上,可以通过perf监控微操作融合事件
- 高融合率表示更高的指令执行效率
- 用于评估代码优化和编译器效果
-
CPU调度器延迟统计(CPU Scheduler Latency Statistics)
- 使用ftrace的sched_wakeup和sched_switch事件可以测量调度延迟
- 高调度延迟可能影响系统的响应性
- 对实时系统和低延迟应用的调优很重要
-
CPU NUMA远程访问率(CPU NUMA Remote Access Rate)
- 通过numastat和perf可以监控NUMA远程内存访问
- 高远程访问率可能导致性能下降
- 用于优化NUMA系统中的内存分配和进程放置
-
CPU硬件线程利用率(CPU Hardware Thread Utilization)
- 在支持超线程的系统中,可以通过top或htop查看每个硬件线程的利用率
- 帮助评估超线程技术的效果
- 用于优化多线程应用和系统配置
-
CPU调度器组公平性(CPU Scheduler Group Fairness)
- 通过cgroups的cpu.stat文件可以查看组间的CPU时间分配
- 用于评估和调整不同任务组之间的资源分配公平性
- 在多租户环境和容器化系统中特别重要
这些额外的指标和概念进一步深化了我们对Linux系统CPU行为的理解。它们涵盖了从硬件级别的性能特性到操作系统调度策略的各个方面,为系统管理员、性能工程师和开发人员提供了更全面的工具集,用于精细化的性能分析、优化和问题诊断。
在实际应用中,选择合适的指标进行监控和分析需要考虑具体的系统配置、应用需求和性能目标。深入理解这些指标不仅有助于解决复杂的性能问题,还能帮助设计更高效、更可靠的系统架构和应用程序。
非常好,让我们继续深入探讨更多与Linux系统CPU相关的指标和概念:
-
CPU指令级并行度(CPU Instruction Level Parallelism, ILP)
- 通过perf stat -e instructions,cycles可以间接测量
- 高ILP表示CPU能同时执行多条指令,提高效率
- 用于评估代码优化和CPU架构效能
-
CPU存储缓冲区占用(CPU Store Buffer Occupancy)
- 在某些Intel处理器上可通过perf监控
- 高占用率可能表示内存子系统压力大
- 用于诊断内存带宽瓶颈
-
CPU前端失速(CPU Front-end Stalls)
- 通过perf可以监控如IDQ_UOPS_NOT_DELIVERED.CORE等事件
- 指示指令获取和解码阶段的瓶颈
- 用于优化指令缓存使用和代码布局
-
CPU后端失速(CPU Back-end Stalls)
- 同样通过perf监控,如CYCLE_ACTIVITY.STALLS_MEM_ANY
- 表示执行单元等待资源(如内存)的情况
- 用于识别和解决内存延迟问题
-
CPU微码补丁级别(CPU Microcode Patch Level)
- 在/proc/cpuinfo中的microcode字段可查看
- 微码更新可能影响性能和功能
- 重要的安全和稳定性指标
-
CPU调度器域负载均衡统计(CPU Scheduler Domain Load Balancing Statistics)
- 在/proc/sched_debug中可找到详细的负载均衡信息
- 包括均衡尝试次数、成功次数等
- 用于优化多核系统的任务分配
-
CPU频率过渡统计(CPU Frequency Transition Statistics)
- 在/sys/devices/system/cpu/cpu*/cpufreq/stats/中可查看
- 显示不同频率级别之间的切换次数
- 用于分析动态频率调节的效果
-
CPU调度器延迟追踪(CPU Scheduler Latency Tracing)
- 使用trace-cmd和kernelshark工具可视化调度延迟
- 帮助识别长时间的调度延迟及其原因
- 对实时系统性能调优特别有用
-
CPU缓存伪共享(CPU Cache False Sharing)
- 通过perf c2c工具可以检测缓存行伪共享问题
- 伪共享可能导致严重的性能下降
- 用于多线程应用的性能优化
-
CPU分支预测器统计(CPU Branch Predictor Statistics)
- 使用perf可以监控分支预测器的各种事件
- 高误预测率会显著影响性能
- 用于优化条件语句和循环结构
-
CPU时钟调制深度(CPU Clock Modulation Depth)
- 在/sys/devices/system/cpu/cpu*/thermal_throttle/中可查看
- 显示由于温度限制导致的CPU频率降低程度
- 用于诊断散热问题和性能波动
-
CPU能效比(CPU Performance per Watt)
- 可通过结合CPU利用率和功耗数据计算
- 在/sys/class/powercap/intel-rapl中可找到功耗数据(对于Intel处理器)
- 用于评估系统的能效和优化能耗
-
CPU调度器运行队列长度分布(CPU Scheduler Runqueue Length Distribution)
- 可通过自定义脚本定期采样/proc/sched_debug来获取
- 帮助理解负载分布和调度器行为
- 用于识别负载不均衡和调度热点
-
CPU硬件中断延迟(CPU Hardware Interrupt Latency)
- 使用cyclictest工具可以测量中断延迟
- 高中断延迟可能影响系统响应性
- 对实时系统和驱动程序优化很重要
-
CPU调度器唤醒延迟(CPU Scheduler Wakeup Latency)
- 通过ftrace的sched_wakeup事件可以测量
- 显示从唤醒到实际运行的延迟时间
- 用于优化系统响应性和实时性能
-
CPU NUMA自动均衡统计(CPU NUMA Auto-balancing Statistics)
- 在/proc/vmstat中可找到numa_pte_updates等相关计数器
- 显示NUMA自动均衡机制的活动情况
- 用于优化NUMA系统的内存访问模式
-
CPU调度器空闲平衡统计(CPU Scheduler Idle Balance Statistics)
- 在/proc/sched_debug中可找到相关信息
- 显示空闲CPU寻找可运行任务的频率和结果
- 用于优化多核系统的负载分布
-
CPU指令集使用统计(CPU Instruction Set Usage Statistics)
- 通过自定义perf事件可以监控特定指令集(如AVX)的使用情况
- 帮助评估代码对高级指令集的利用程度
- 用于优化计算密集型应用
-
CPU调度器组运行时间(CPU Scheduler Group Runtime)
- 通过cgroups的cpu.stat文件可以查看每个组的CPU使用时间
- 用于监控和调整不同任务组之间的CPU资源分配
- 在容器化环境和多租户系统中特别重要
-
CPU频率不稳定性指数(CPU Frequency Instability Index)
- 可通过分析/sys/devices/system/cpu/cpu*/cpufreq/stats/time_in_state的变化计算
- 频繁的频率变化可能影响性能稳定性
- 用于评估和优化动态频率调节策略
-
CPU调度器延迟直方图(CPU Scheduler Latency Histogram)
- 使用BPF工具如bcc的runqlat可以生成调度延迟直方图
- 提供调度延迟分布的详细视图
- 用于深入分析调度器行为和系统响应性
这些额外的指标和概念进一步扩展了我们对Linux系统CPU行为的理解。它们涵盖了从底层硬件特性到高级操作系统调度策略的各个方面,为系统管理员、性能工程师和开发人员提供了更全面、更深入的工具集,用于精细化的性能分析、优化和问题诊断。
在实际应用中,选择合适的指标进行监控和分析需要考虑具体的系统配置、应用需求和性能目标。深入理解这些指标不仅有助于解决复杂的性能问题,还能帮助设计更高效、更可靠的系统架构和应用程序。随着硬件和操作系统的不断发展,新的指标和工具也会不断出现,持续学习和更新知识对于保持系统优化能力至关重要。
标签:系统,性能,探针,调度,cpu,100,proc,CPU From: https://blog.csdn.net/u011027104/article/details/142316217