軟體系統開發常見的十大瓶頸

才智咖 人氣:3.12W

J2EE核心是一組技術規範與指南,其中所包含的各類元件、服務架構及技術層次,均有共同的標準及規格。下面是小編整理的關於軟體系統開發常見的十大瓶頸,歡迎大家參考!

軟體系統開發常見的十大瓶頸

資料庫

工作任務記憶體超過可用的RAM記憶體

長/短查詢

寫入衝突

大連線(join)佔用記憶體

虛擬化

共享一個HDD、磁碟尋死(disk seek death)

在雲端網路I/O波動

程式設計

執行緒:死鎖、除錯、非線性擴充套件等

事件驅動程式設計:callback()過於複雜、如何在函式呼叫中儲存有狀態等

缺乏調優、跟蹤、日誌等

單模組不可擴充套件、單點故障(SPOF:Single Point Of Failure)、非橫向擴充套件等

有狀態應用程式

設計問題:開發的.應用程式只在自己的機器行執行正常,或者只是在幾個人測試的時候正常(沒有經歷壓力測試)。

演算法過於複雜

相關服務,例如DNS查詢以及其他可能遮蔽的服務

堆疊空間

磁碟

訪問本地磁碟

隨機訪問磁碟I/O

磁碟碎片

當SSD寫入的資料大於SSD容量時,效能會下降

OS

Fsync飽和,Linux緩衝區填塞(Fsync flushing, linux buffer cache filling up)

TCP緩衝區太小

檔案描述符限制

功率分配(Power budget)

快取

沒使用memcached(資料庫崩潰)

HTTP中:headers、etags、沒有使用gzip壓縮等。

沒有充分利用瀏覽器快取

位元組碼快取(如PHP)

L1/L2快取:這是個令人頭疼的大瓶頸。把關鍵並且經常訪問的資料儲存在L1/L2中。這涉及到很多:snappy網路I/O,列資料庫直接在壓縮資料上執行演算法等。利用一些技術不銷燬你的TLB。最重要的思想是緊緊的抓住計算機的體系結構,涉及多核CPU,L1/L2,共享的L3,NUMA RAM,從DRAM到晶片資料傳輸頻寬/延遲,DRAM快取的DiskPages,DirtyPages,流經CPU<->DRAM<->NIC的TCP包。

CPU

CPU過載

內容切換—>單核上開啟的執行緒過多、Linux排程器、系統呼叫太多等

IO等待—>所有的CPU在同速等待

CPU快取:快取資料是一個細粒度程序,為了在多個例項與不同的值資料之間找到正確的平衡,來保持快取資料的一致性和繁重同步。

底板吞吐量(Backplane throughput)

網路

NIC刷爆、IRQ飽和、軟中斷佔用掉了100%CPU

DNS查詢

資料包丟失

網路中存在預期外的路由

訪問網路磁碟

共享SAN

伺服器故障—>無法從服務處得到響應

程序

測試時間

開發時間

團隊規模

預算

程式碼債務

記憶體

記憶體不足—>殺死程序,切換到swap,掛起

記憶體不足導致磁碟交換(與swap相關)

記憶庫開銷過大(Memory library overhead)

記憶體分片(在Java中需要會因為記憶體回收而停頓;在C中,malloc總是開始分配記憶體)