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
英文地址,請注明出處:http://en.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…