**不需要了解每個組件的所有實現細節**,只要能理解它們最基本的工作原理和協作方式

大部分性能分析和優化都會包含的知識:
分類 | 原理 | 性能指標 | 性能剖析 | 調優方法
---- | ---- | ---- | ---- | ----
文件系統 | 虛擬文件系統、文件系統I/O棧、文件系統緩存、文件系統種類 | 容量、IOPS、緩存命中率 | df、strace、vmstat、sar、perf、proc 文件系統 | 文件系統選型、利用文件系統緩存、I/O 隔離
Linux 內核 | 內核態 | | BPF、perf、proc 文件系統 | 內核選項
應用程序 | | 吞吐量、響應時間、資源使用率 | | USE 方法(使用率、飽和度、錯誤)、進程剖析(進程狀態、資源使用率、I/O 剖析、系統調用、熱點函數、動態追蹤)、APM(邏輯簡化、編程語言、算法調優、非阻塞 I/O、利用緩存與緩沖區、異步處理并發、垃圾回收)
架構設計 | | | | 空間換時間(緩存、緩沖區、冗余數據)、時間換空間(壓縮編碼、頁面交換)、并行處理(多線程、多進程、分布式)、異步處理(異步 I/O、消息隊列、事件通知)
性能監控 | | | | 時間序列分析(歷史趨勢分析、性能模型構建、未來趨勢預測)、服務調用追蹤(服務調用流程跟蹤、服務調用性能分析、服務調用鏈拓撲展示)、數據可視化(趨勢圖、散點圖、熱圖、餅圖)、告警通知(閾值選擇、報警策略、通知閾值)
性能測試 | | | | 明確需求(系統資源需求、應用程序需求)、環境假設(合理的假設、生產環境模擬、生產負載模擬)、性能測試(基準測試、負載測試、壓力測試)、結果分析(應用程序瓶頸、數據庫瓶頸、系統資源瓶頸)
CPU | 進程與線程、CPU調度、中斷系統、CPU緩存、NUMA | 平均負載、CPU 使用率(用戶CPU、系統CPU、IOWAIT、軟中斷、竊取CPU、客戶CPU)、上下文切換(自愿上下文切換、非自愿上下文切換)、CPU緩存命中率 | top/ps、vmstat、mpstat、sar、pidstat、strace、perf、execsnoop、proc 文件系統 | CPU綁定、進程CPU資源限制、進程優先級調整、中斷負載均衡、CPU緩存、NUMA優化
內存 | 地址空間、虛擬內存、內存分配與回收、緩存與緩沖區、SWAP | 系統內存使用量、進程內存使用量、緩存與緩沖區命中率、SWAP使用量 | tree、top、sar、vmstat、cachestat、cachetop、memleak、proc 文件系統 | 減少SWAP使用、減少動態內存分配、優化NUMA、 限制進程內存資源、使用HugePage
網絡 | 網絡配置、TCP / IP 協議、網絡收發流程、高級路由、網絡QoS、網絡防火墻、C10K與C100K | 吞吐量(BPS、QPS、PPS)、延遲、丟包、TCP 重傳 | ethtool、sar、ping、netstat/ss、ifstat、ifconfig、tcpdump、wireshark、iptables、traceroute、ipcontrack、perf | 網卡調優(MTU、隊列長度、鏈路聚合)、協議調優(HTTP、TCP、Overlay)、資源控制(QoS)、內核調優(NAT調優、功能卸載、負載均衡、DPDK)
磁盤 IO | 磁盤管理、磁盤類型、磁盤接口、磁盤I/O棧 | 使用率、IOPS、吞吐量、IOWAIT | dstat、sar、iostat、pidstat、iotop、iolatency、blktrace、fio、perf | 系統調用、I/O資源控制、充分利用緩存、RAID、I/O隔離
- 空白目錄
- 精簡版Spring的實現
- 0 前言
- 1 注冊和獲取bean
- 2 抽象工廠實例化bean
- 3 注入bean屬性
- 4 通過XML配置beanFactory
- 5 將bean注入到bean
- 6 加入應用程序上下文
- 7 JDK動態代理實現的方法攔截器
- 8 加入切入點和aspectj
- 9 自動創建AOP代理
- Redis原理
- 1 Redis簡介與構建
- 1.1 什么是Redis
- 1.2 構建Redis
- 1.3 源碼結構
- 2 Redis數據結構與對象
- 2.1 簡單動態字符串
- 2.1.1 sds的結構
- 2.1.2 sds與C字符串的區別
- 2.1.3 sds主要操作的API
- 2.2 雙向鏈表
- 2.2.1 adlist的結構
- 2.2.2 adlist和listNode的API
- 2.3 字典
- 2.3.1 字典的結構
- 2.3.2 哈希算法
- 2.3.3 解決鍵沖突
- 2.3.4 rehash
- 2.3.5 字典的API
- 2.4 跳躍表
- 2.4.1 跳躍表的結構
- 2.4.2 跳躍表的API
- 2.5 整數集合
- 2.5.1 整數集合的結構
- 2.5.2 整數集合的API
- 2.6 壓縮列表
- 2.6.1 壓縮列表的結構
- 2.6.2 壓縮列表結點的結構
- 2.6.3 連鎖更新
- 2.6.4 壓縮列表API
- 2.7 對象
- 2.7.1 類型
- 2.7.2 編碼和底層實現
- 2.7.3 字符串對象
- 2.7.4 列表對象
- 2.7.5 哈希對象
- 2.7.6 集合對象
- 2.7.7 有序集合對象
- 2.7.8 類型檢查與命令多態
- 2.7.9 內存回收
- 2.7.10 對象共享
- 2.7.11 對象空轉時長
- 3 單機數據庫的實現
- 3.1 數據庫
- 3.1.1 服務端中的數據庫
- 3.1.2 切換數據庫
- 3.1.3 數據庫鍵空間
- 3.1.4 過期鍵的處理
- 3.1.5 數據庫通知
- 3.2 RDB持久化
- 操作系統
- 2021-01-08 Linux I/O 操作
- 2021-03-01 Linux 進程控制
- 2021-03-01 Linux 進程通信
- 2021-06-11 Linux 性能優化
- 2021-06-18 性能指標
- 2022-05-05 Android 系統源碼閱讀筆記
- Java基礎
- 2020-07-18 Java 前端編譯與優化
- 2020-07-28 Java 虛擬機類加載機制
- 2020-09-11 Java 語法規則
- 2020-09-28 Java 虛擬機字節碼執行引擎
- 2020-11-09 class 文件結構
- 2020-12-08 Java 內存模型
- 2021-09-06 Java 并發包
- 代碼性能
- 2020-12-03 Java 字符串代碼性能
- 2021-01-02 ASM 運行時增強技術
- 理解Unsafe
- Java 8
- 1 行為參數化
- 1.1 行為參數化的實現原理
- 1.2 Java 8中的行為參數化
- 1.3 行為參數化 - 排序
- 1.4 行為參數化 - 線程
- 1.5 泛型實現的行為參數化
- 1.6 小結
- 2 Lambda表達式
- 2.1 Lambda表達式的組成
- 2.2 函數式接口
- 2.2.1 Predicate
- 2.2.2 Consumer
- 2.2.3 Function
- 2.2.4 函數式接口列表
- 2.3 方法引用
- 2.3.1 方法引用的類別
- 2.3.2 構造函數引用
- 2.4 復合方法
- 2.4.1 Comparator復合
- 2.4.2 Predicate復合
- 2.4.3 Function復合
- 3 流處理
- 3.1 流簡介
- 3.1.1 流的定義
- 3.1.2 流的特點
- 3.2 流操作
- 3.2.1 中間操作
- 3.2.2 終端操作
- 3.3.3 構建流
- 3.3 流API
- 3.3.1 flatMap的用法
- 3.3.2 reduce的用法
- 3.4 collect操作
- 3.4.1 collect示例
- 3.4.2 Collector接口