Linux系统性能优化与监控

系统性能优化与监控是保障 Linux 服务器稳定运行的核心技术,涉及 ​​CPU、内存、磁盘 I/O、网络、进程​​ 等多维度的指标分析、问题定位与优化策略。以下从​​监控工具与指标​​、​​常见问题诊断​​、​​优化方法​​三个层面详细讲解,并结合​​实战案例​​说明。


​一、性能监控的核心指标与工具​

要优化系统性能,首先需要明确“哪些指标异常”,再定位“异常的原因”。以下是各维度的核心监控指标及常用工具。

​1. CPU 性能监控​

CPU 是系统的“大脑”,其性能瓶颈通常表现为 ​​高负载(Load Average)​​、​​高使用率(User/Sys)​​ 或 ​​中断风暴​​。

​(1) 核心监控指标​
  • ​Load Average(平均负载)​​:表示单位时间内处于 ​​运行(Running)​​ 或 ​​等待运行(Runnable)​​ 状态的进程数(包括等待 I/O 的进程)。
    • 通常关注 1 分钟(1m)、5 分钟(5m)、15 分钟(15m)的平均值。
    • 理想状态:1m5m15m,且不超过 CPU 核心数(如 4 核 CPU,负载不超过 4 为健康)。
  • ​CPU 使用率(Usage)​​:
    • User%:用户进程占用 CPU 的比例(正常应占大部分)。
    • System%:内核进程占用 CPU 的比例(过高可能意味着系统调用频繁或中断过多)。
    • Idle%:CPU 空闲比例(过低说明 CPU 繁忙)。
    • IOWait%:CPU 等待 I/O 完成的时间比例(过高说明磁盘 I/O 是瓶颈)。
  • ​上下文切换(Context Switch)​​:进程切换导致的 CPU 时间消耗(过高可能因进程过多或调度频繁)。
​(2) 监控工具与示例​
  • top/htop​:实时查看进程 CPU 占用。

    top -d 1  # 每 1 秒刷新一次

    输出关键列:

    • PID:进程 ID。
    • USER:进程所有者。
    • %CPU:CPU 使用率。
    • COMMAND:进程名称。

    ​示例​​:发现 mysql 进程占用 80% CPU,需进一步分析其查询是否低效。

  • mpstat​:细粒度分析 CPU 各核心的使用率(适合多核服务器)。

    mpstat -P ALL 1  # 每 1 秒输出所有 CPU 核心的统计

    输出关键列:

    • %usr:用户态 CPU 使用率。
    • %sys:内核态 CPU 使用率。
    • %idle:空闲率。

    ​示例​​:某核心 %idle 持续低于 10%,说明该核心负载过高。

  • pidstat​:定位具体进程的 CPU 消耗。

    pidstat 1  # 每 1 秒输出所有进程的 CPU 使用率
    pidstat -p 1234 1  # 监控 PID 为 1234 的进程

​2. 内存性能监控​

内存是系统的“临时仓库”,性能问题通常表现为 ​​内存不足(OOM)​​、​​Swap 频繁使用​​ 或 ​​内存泄漏​​。

​(1) 核心监控指标​
  • ​可用内存(Free)​​:未被使用的物理内存(过低可能导致系统使用 Swap)。
  • ​缓存(Cache)与缓冲(Buffer)​​:内核用于加速磁盘 I/O 的内存(合理利用可提升性能,但过多可能挤占应用内存)。
  • ​Swap 使用率​​:Swap 分区被使用的比例(过高说明物理内存不足)。
  • ​内存泄漏(Memory Leak)​​:进程持续占用内存且不释放(表现为可用内存持续下降)。
​(2) 监控工具与示例​
  • free -h​:查看内存使用概况(-h 表示人性化单位)。

    free -h

    输出关键列:

    • Mem:物理内存。
      • total:总内存。
      • used:已使用内存(不包含缓存/缓冲)。
      • free:空闲内存。
      • buff/cache:缓存/缓冲内存。
    • Swap:交换分区。

    ​示例​​:free 列接近 0,buff/cache 占用高,说明应用内存不足但内核缓存占用过多。

  • vmstat​:监控内存、Swap、I/O 等综合指标。

    vmstat 1  # 每 1 秒刷新一次

    输出关键列:

    • si(Swap In):从 Swap 读取到内存的数据量(持续 >0 说明物理内存不足)。
    • so(Swap Out):从内存写入 Swap 的数据量(持续 >0 说明物理内存不足)。
    • cache:缓存内存大小。
    • buff:缓冲内存大小。

    ​示例​​:siso 持续大于 1000,说明 Swap 频繁交换,需增加物理内存。

  • pmap​:查看进程的内存映射(定位大内存进程或内存泄漏)。

    pmap -x <PID>  # 显示 PID 进程的详细内存占用

    ​示例​​:发现某 Java 进程 pmap 输出中 RSS(实际驻留内存)持续增长,可能存在内存泄漏。

​3. 磁盘 I/O 性能监控​

磁盘 I/O 是系统的“瓶颈大户”,性能问题通常表现为 ​​高延迟(Latency)​​、​​低吞吐量(Throughput)​​ 或 ​​磁盘队列过长​​。

​(1) 核心监控指标​
  • %util​:磁盘忙于 I/O 的时间比例(接近 100% 说明磁盘已满负荷)。
  • await​:I/O 请求的平均等待时间(包括队列等待和磁盘处理时间,单位 ms)。
  • svctm​:磁盘处理 I/O 请求的平均时间(不包括队列等待,单位 ms)。
  • r/s/w/s​:每秒读/写次数(IOPS)。
  • ​队列长度(avgqu-sz)​​:等待处理的 I/O 请求数(过高说明磁盘处理不过来)。
​(2) 监控工具与示例​
  • iostat​:查看磁盘 I/O 统计(需安装 sysstat 包)。

    iostat -dx 1  # -d 显示磁盘,-x 显示扩展指标,每 1 秒刷新

    输出关键列(以 sda 磁盘为例):

    • %util:磁盘利用率(>80% 需警惕)。
    • await:I/O 平均等待时间(机械盘正常约 5-15ms,SSD 约 1-5ms)。
    • svctm:磁盘处理时间(机械盘约 3-10ms)。
    • r/s/w/s:读写 IOPS(机械盘约 100-200,SSD 可达数万)。

    ​示例​​:sda%util=95%await=50ms,说明磁盘已严重瓶颈。

  • iotop​:实时查看进程的 I/O 读写速率(需 root 权限)。

    iotop -o  # 仅显示有 I/O 活动的进程

    输出关键列:

    • WRITE/READ:进程的写/读速率(KB/s)。
    • DISK READ/DISK WRITE:磁盘实际的读写速率。

    ​示例​​:发现 mysql 进程 WRITE 速率为 500MB/s,远超磁盘上限,需优化 SQL 减少写操作。

  • dstat​:综合监控工具(可同时查看 CPU、内存、磁盘、网络)。

    dstat 1  # 每 1 秒刷新一次

​4. 网络性能监控​

网络性能问题通常表现为 ​​带宽占满​​、​​延迟过高​​ 或 ​​连接数过多​​(如 TIME_WAIT 堆积)。

​(1) 核心监控指标​
  • ​带宽占用(Bandwidth)​​:入/出流量的速率(单位 Mbps)。
  • ​延迟(Latency)​​:数据包从发送到接收的时间(如 ping 延迟)。
  • ​连接数(Connections)​​:当前 TCP 连接数(ESTABLISHEDTIME_WAIT 等状态)。
  • ​丢包率(Packet Loss)​​:传输过程中丢失的数据包比例。
​(2) 监控工具与示例​
  • iftop​:实时查看网络接口的流量(按流量排序)。

    iftop -i eth0  # 监控 eth0 接口的流量

    输出关键列:

    • TX/RX:发送/接收速率(KB/s)。
    • 2s/10s/40s:最近 2/10/40 秒的平均流量。

    ​示例​​:发现 eth0RX 速率为 100Mbps(接近千兆网卡上限),需检查是否有大流量应用。

  • nload​:图形化显示各接口的实时带宽(需安装)。

    nload eth0
  • ss​:查看 TCP 连接状态(比 netstat 更高效)。

    ss -ant | grep TIME_WAIT  # 查看 TIME_WAIT 状态的连接数
    ss -s  # 统计总连接数、各状态连接数

    ​示例​​:TIME_WAIT 连接数超过 10000,可能导致端口耗尽,需调整内核参数 net.ipv4.tcp_tw_reuse=1

  • tcpdump​:抓包分析网络流量(定位异常请求)。

    tcpdump -i eth0 port 80 -n  # 抓取 eth0 接口 80 端口的流量

​5. 进程性能监控​

进程是系统的“执行单元”,性能问题通常表现为 ​​高 CPU/内存占用​​、​​僵尸进程​​ 或 ​​异常重启​​。

​(1) 核心监控指标​
  • ​进程状态(State)​​:R(运行)、S(睡眠)、D(不可中断睡眠)、Z(僵尸)、T(停止)。
  • ​CPU/内存占用​​:进程占用的 CPU 和内存比例。
  • ​父进程 ID(PPID)​​:定位僵尸进程的父进程(避免孤儿进程堆积)。
​(2) 监控工具与示例​
  • ps​:查看进程详细信息。

    ps aux | sort -k3nr | head  # 按 CPU 占用降序排列前 10 进程
    ps -ef | grep Z  # 查看僵尸进程

    ​示例​​:发现 defunct 状态的僵尸进程,其父进程 PPID=1(init 进程),需终止父进程或手动清理。

  • pstree​:以树状图显示进程父子关系。

    pstree -p  # 显示进程 PID
  • pgrep/pkill​:按名称查找或终止进程。

    pgrep nginx  # 查找所有 nginx 进程的 PID
    pkill -9 nginx  # 强制终止所有 nginx 进程

​二、常见问题诊断与优化方法​

通过监控工具定位到异常指标后,需针对性地优化。以下是常见问题场景及解决方案。

​场景1:CPU 使用率持续过高(>80%)​

​诊断步骤​​:
  1. tophtop 找到占用 CPU 最高的进程(如 mysqljava)。
  2. pidstat -p <PID> 1 查看该进程的 CPU 细分(用户态 %usr 或内核态 %sys)。
  3. %sys 高,可能是系统调用频繁(如频繁 open/close 文件);若 %usr 高,可能是应用代码逻辑复杂或死循环。
​优化方法​​:
  • ​调整进程优先级​​:用 renice 降低高 CPU 进程的优先级(nice 值越大,优先级越低)。
    renice 10 -p <PID>  # 将 PID 进程的 nice 值设为 10(默认 0)
  • ​优化应用代码​​:检查是否有死循环、递归过深或低效算法(如用 perf 分析热点函数)。
    perf top -p <PID>  # 实时查看进程的热点函数(CPU 消耗最多的函数)
  • ​限制 CPU 资源​​:用 cgroups 限制进程的 CPU 使用率(适合容器化场景)。

​场景2:内存不足(可用内存 < 10%,频繁使用 Swap)​

​诊断步骤​​:
  1. free -h 确认内存和 Swap 使用情况(Swapused 接近 total)。
  2. vmstat 1 观察 si(Swap In)和 so(Swap Out)是否持续 >0(说明物理内存不足)。
  3. pmap -x <PID> 找到占用内存最大的进程(如 Java 应用的堆内存、数据库的缓存)。
​优化方法​​:
  • ​释放缓存内存​​:手动清理内核缓存(需谨慎,可能影响 I/O 性能)。
    sync  # 同步缓存到磁盘
    echo 1 > /proc/sys/vm/drop_caches  # 释放页缓存(Page Cache)
    echo 2 > /proc/sys/vm/drop_caches  # 释放目录项和 inode 缓存
  • ​调整进程内存限制​​:用 ulimit -v 限制进程的虚拟内存大小(需修改 /etc/security/limits.conf 持久化)。
  • ​修复内存泄漏​​:通过 pmap 或应用日志(如 Java 的 HeapDump)定位泄漏点,修复代码。
  • ​增加物理内存或调整 Swap​​:若长期不足,升级服务器内存或增大 Swap 分区(但 Swap 仅作为临时缓冲,不可替代物理内存)。

​场景3:磁盘 I/O 延迟高(await > 50ms)​

​诊断步骤​​:
  1. iostat -dx 1 确认 %util(接近 100%)、await(高)、svctm(正常)。
  2. iotop 找到高 I/O 进程(如数据库的 mysqld、日志写入的 rsyslogd)。
  3. 检查文件系统类型(如 ext4、XFS)和挂载选项(如 noatime 是否启用)。
​优化方法​​:
  • ​更换更快的存储设备​​:将机械盘(HDD)替换为 SSD(随机 I/O 性能提升 10 倍以上)。
  • ​优化文件系统​​:
    • 启用 noatime 挂载选项(禁用访问时间更新,减少写操作):
      /dev/sda1 / xfs defaults,noatime 0 0  # 修改 /etc/fstab
      mount -o remount /  # 重新挂载生效
    • 调整文件系统块大小(如 XFS 的 blocksize=4k 适合数据库)。
  • ​减少 I/O 请求​​:
    • 数据库优化:合并小文件、使用批量写入(如 MySQL 的 innodb_flush_log_at_trx_commit=2 减少日志写入次数)。
    • 日志轮转:用 logrotate 定期切割大日志文件,避免单文件过大。

​场景4:网络延迟高(ping 延迟 > 200ms)或丢包​

​诊断步骤​​:
  1. ping <目标IP> 测试基础延迟和丢包率。
  2. traceroute <目标IP> 定位网络跳点(哪一跳开始延迟或丢包)。
  3. ss -ti 查看 TCP 连接的详细统计(如重传次数 retrans)。
​优化方法​​:
  • ​调整内核网络参数​​:
    • 增大 TCP 接收/发送缓冲区(减少网络延迟):
      net.core.rmem_max=16777216  # 接收缓冲区最大值(16MB)
      net.core.wmem_max=16777216  # 发送缓冲区最大值(16MB)
      net.ipv4.tcp_rmem="4096 87380 16777216"  # 接收缓冲区范围
      net.ipv4.tcp_wmem="4096 87380 16777216"  # 发送缓冲区范围
    • 减少 TIME_WAIT 连接数(避免端口耗尽):
      net.ipv4.tcp_tw_reuse=1  # 允许重用 TIME_WAIT 连接
      net.ipv4.tcp_tw_recycle=1  # 加速回收 TIME_WAIT 连接(需谨慎,可能影响 NAT 环境)
  • ​优化应用层配置​​:
    • 数据库:启用连接池(如 HikariCP),减少 TCP 握手开销。
    • Web 服务器:启用 HTTP/2(多路复用),减少连接数。

​场景5:僵尸进程(Zombie Process)堆积​

​诊断步骤​​:
  1. ps aux | grep Z 查看僵尸进程(状态为 Z)。
  2. pstree -p <PPID> 找到僵尸进程的父进程(PPID 列)。
​优化方法​​:
  • ​终止父进程​​:僵尸进程的父进程若不再需要,可直接终止(子进程会被 init 进程接管并回收资源)。
    kill -9 <PPID>  # 终止父进程
  • ​手动回收资源​​:若父进程无法终止(如系统关键进程),可重启服务器(临时方案)。

​三、实战案例:综合性能优化​

​案例背景​

某电商服务器近期响应缓慢,用户反馈“页面加载慢”,运维人员需快速定位问题并优化。

​诊断过程​

  1. ​初步排查​​:用 top 发现 mysql 进程占用 CPU 70%,await(磁盘 I/O 等待时间)为 45ms(机械盘正常约 15ms)。
  2. ​深入分析​​:
    • iotop 显示 mysql 进程每秒写操作 500 次(IOPS 达到机械盘上限)。
    • vmstat 显示 si=100so=50(Swap 频繁交换,物理内存不足)。
    • pmap 查看 mysql 进程内存,发现其堆内存占用 8GB(总内存 16GB,剩余可用仅 2GB)。
  3. ​根因定位​​:
    • MySQL 因查询未命中索引,导致大量全表扫描(I/O 密集)。
    • 应用日志未分割,/var/log/app.log 增长至 100GB(频繁写磁盘)。

​优化措施​

  1. ​MySQL 优化​​:
    • 为高频查询字段添加索引(如 user_idorder_time)。
    • 调整 my.cnf 配置,增大 innodb_buffer_pool_size(从 4GB 调至 8GB,减少磁盘 I/O)。
  2. ​日志优化​​:
    • logrotate 配置日志切割(每日切割,保留 7 天),避免单文件过大。
    • 将日志写入 tmpfs(内存文件系统),减少磁盘写操作:
      tmpfs /var/log/app.log tmpfs size=2G,mode=1777 0 0  # 修改 /etc/fstab
  3. ​内存扩容​​:将服务器内存从 16GB 升级至 32GB,避免 Swap 使用。
  4. ​磁盘升级​​:将机械盘(HDD)替换为 SSD,提升随机 I/O 性能。

​优化效果​

  • mysql CPU 占用降至 30%,await 降至 10ms(SSD 效果)。
  • 物理内存可用空间稳定在 8GB 以上,Swap 未再使用。
  • 页面加载时间从 5s 缩短至 1.5s,用户投诉减少 90%。

​总结​

系统性能优化与监控的核心是“​​监控→诊断→优化​​”的闭环:

  1. ​监控​​:通过 topiostatss 等工具实时采集指标。
  2. ​诊断​​:结合指标异常(如 CPU 高、内存不足)定位具体进程或组件。
  3. ​优化​​:针对问题(如索引缺失、内存泄漏)调整配置或代码。

实际操作中需结合业务场景(如数据库、Web 服务)灵活应用,持续监控优化后的效果,形成常态化运维机制。

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

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

相关文章

如何在 React + TypeScript 中实现 JSON 格式化功能

如何在 React TypeScript 中实现 JSON 格式化功能 作为前端开发者&#xff0c;我们经常需要处理 JSON 数据。无论是 API 调试、配置文件编辑还是数据转换&#xff0c;能够格式化 JSON 是一项基本但非常有用的技能。本文将详细介绍如何在 React 和 TypeScript 环境中实现 JSON…

Mac连接服务器Docker容器全攻略

苹果电脑( macOS 系统 )连接服务器、配置容器,整体思路和 Linux 终端操作更贴近,以下结合 macOS 特点,详细分步说明,以 Docker 容器 + 常见 Linux 服务器( 如 CentOS、Ubuntu )为例: 一、连接服务器(SSH 方式, macOS 终端原生支持 ) 1. 准备信息 找运维或云平台…

【字节跳动】数据挖掘面试题0019:带货直播间推荐:现在有一个带货的直播间,怎么把它精准地推送给有需要的用户

文章大纲 带货直播间推荐系统:原理、算法与实践 一、推荐系统在带货直播中的重要性 二、数据收集与处理 1. 用户数据 2. 直播间数据 3. 用户行为数据 4. 数据处理与特征工程 三、推荐算法实现 1. 基于内容的推荐 2. 基于协同过滤的推荐 3. 基于知识图谱的推荐 4. 混合推荐算法…

Windows10笔记本电脑开启BIOS

文章目录什么是BIOS一、方案一&#xff1a;快捷键进入二、方案二&#xff08;推荐&#xff09;各品牌快捷键大全什么是BIOS BIOS 全拼为 BasicInputOutputSystem, 即基本输入/输出系统,是计算机中非常基础而且重要的程序。把这一段程序存放在一个不需要电源的记忆体(芯片)中,就…

NFS、iSCSI 和lnmp部署操作

目录 &#xff08;一&#xff09;基础配置 1.NFS服务安装 2.修改配置文件 3.重载配置文件 4.查看共享目录 5.客户端挂载 6.更换共享目录 7.基础实验 &#xff08;二&#xff09;布置lnmp平台 1.php 安装软件 检测 2.连接MySQL 测试 3.软件实施 软件安装配置 &…

Redis深度解析:从缓存原理到高并发实战

第一部分&#xff1a;Redis核心概念与架构设计1.1 Redis本质解析Redis&#xff08;Remote Dictionary Server&#xff09;作为开源的内存数据结构存储系统&#xff0c;其核心价值在于&#xff1a;内存优先架构&#xff1a;数据主要存储在内存中&#xff0c;读写性能达到10万 QP…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博类别信息爬取

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解架构搭建 视频在线地址&#xff1a; 2026…

GD32/STM32嵌入CMSIS-DSP的库(基于Keil)

当你要用到三角函数、开方、矩阵运算等复杂的数学运算时&#xff0c;可以选择用C库的math.h里面的函数&#xff0c;如果要求速度快的话就得用CMSIS-DSP库里面的函数了&#xff0c;因为CMSIS-DSP库充分运用了CM4内核的浮点运算单元&#xff08;若有&#xff09;和DSP相关的指令&…

页面登录阻止浏览器提醒是否保存密码

一、原因 使用input的type"password"类型&#xff0c;浏览器会提醒是否记住密码。 二、解决 取消type"password" 三、实现输入密码*代替 通过input输入框&#xff0c;监听输入值&#xff0c;进行替换成*符号&#xff0c;避免使用input的type"password…

【iOS】dyld加载流程——应用程序的加载

目录 前言 编译过程与动静态库 编译过程 动静态库 dyld &#x1f4cc; 什么是 dyld&#xff1f; dyld_shared_cache: dyld加载流程 _dyld_start dyldbootstrap::start dyld::main() 配置环境变量 共享缓存 主程序的初始化 插入动态库 link主程序 link动态库 弱…

从零开始,手把手教你本地部署Stable Diffusion AI绘画(Win最新版)

本号之前有发过一篇win平台的教程&#xff0c;由于是去年10月发布的&#xff0c;而Al绘画技术发展很快&#xff0c;那篇教程已经有些不适用了&#xff0c;有些同学执行到第二步就出错了。 应广大同学的期望&#xff0c;我更新一版新版详细教程。 一、前言 1.为什么要本地部署…

day21 力扣669. 修剪二叉搜索树 力扣108.将有序数组转换为二叉搜索树 力扣538.把二叉搜索树转换为累加树

修剪二叉搜索树 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即&#xff0c;如果没有被移除&#xff0c;原有的父代子代关…

《设计模式之禅》笔记摘录 - 7.中介者模式

中介者模式的定义中介者模式的定义为&#xff1a;Define an object that encapsulates how a set of objects interact.Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently…

Flutter:上传图片,选择相机或相册:wechat_assets_picker

图片选择功能&#xff1a;可选单张&#xff0c;或多张。 1、showModalBottomSheet&#xff08;选择相册/相机&#xff09; 2、WechatImagePicker&#xff08;选取图片&#xff09; 3、CompressMediaFile&#xff08;图片压缩&#xff09;1、ActionSheetUtilimport package:duca…

pytest--0

1 pytest 使用方式 pytest测试框架-- 基本功能使用详解 2 pytest-mock常用方式 pytest–1–pytest-mock常用的方法 3

multiprocessing.Pool 中的 pickle 详解

前言&#xff1a; 在 Python 的 multiprocessing.Pool 中&#xff0c;任务和数据需要通过序列化&#xff08;pickle&#xff09;传递给子进程。pickle 是 Python 的内置序列化模块&#xff0c;用于将 Python 对象转换为字节流&#xff0c;以便在进程间通信时传递。然而&#xf…

Java集合框架体系详解:List/Set/Map接口对比与核心实现原理

一、集合框架核心接口对比 1.1 List/Set/Map接口特性接口类型特性描述典型实现List有序可重复&#xff0c;支持索引访问ArrayList/LinkedListSet无序不可重复&#xff0c;基于哈希表或树实现HashSet/TreeSetMap键值对存储&#xff0c;键唯一值可重复HashMap/TreeMap核心差异&am…

LeafletJS 进阶:GeoJSON 与动态数据可视化

引言 LeafletJS 作为一个轻量、灵活的 JavaScript 地图库&#xff0c;以其对 GeoJSON 数据格式的强大支持而闻名。GeoJSON 是一种基于 JSON 的地理数据格式&#xff0c;能够表示点&#xff08;Point&#xff09;、线&#xff08;LineString&#xff09;、多边形&#xff08;Po…

【STM32实践篇】:F407 时钟系统

文章目录1. 时钟与启动2. CubeMX 时钟树2.1 时钟源2.2 PLL 锁相环2.3 时钟分发与选择2.4 频率限制1. 时钟与启动 复位默认时钟&#xff1a;系统复位后&#xff0c;CPU 时钟默认由 16MHz 内部 RC 振荡器&#xff08;HSI&#xff09;提供&#xff0c;该 RC 振荡器经工厂校准&…

纯前端html实现图片坐标与尺寸(XY坐标及宽高)获取

纯前端html实现图片坐标与尺寸&#xff08;XY坐标及宽高&#xff09;获取。用于证书图片或pdf打印的坐标测定。 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <title>纯html前端实现图片坐标与尺寸&am…