Solaris 10 ZFS ARC 已用盡且 CPU 過載
我們已經在 Oracle M5000 Enterprise 伺服器上的 Solaris 10 上執行 ZFS 幾年了,該伺服器具有 32 個 CPU 核心和 256GB 記憶體。我們正在這台伺服器上執行一個數據庫/應用程序,它似乎讀得很重。
我們在使用 UFS 時遇到了 I/O 問題,通過切換到 ZFS 解決了這個問題。我們有一個 NetApp 儲存單元,通過光纖通道呈現磁碟,然後在單個 LUN 上的作業系統級別使用 ZFS 進行格式化。起初,我們遇到了應用程序記憶體問題,不得不將 ARC 大小限制為 128GB 記憶體。
現在我們開始看到的問題是 ARC 正在被用盡。在此期間,CPU 有時會因空閒時間為 0% 而過載。應用程序程序陷入停頓,自動化程序開始相互衝突。
我一直在研究這個問題一段時間,並諮詢了各種來源,他們似乎都認為我們只需要一台更大的機器或讓供應商優化他們的程式碼。我們正在考慮購買 M10-4 並且一直在與應用程序供應商合作,但我想知道是否還有其他事情發生。
任何幫助將不勝感激,如果需要更多資訊,請告訴我。
下面是 arc_summary.pl 的輸出
System Memory: Physical RAM: 257614 MB Free Memory : 79033 MB LotsFree: 4022 MB ZFS Tunables (/etc/system): set zfs:zfs_arc_max = 137438953472 ARC Size: Current Size: 131043 MB (arcsize) Target Size (Adaptive): 131072 MB (c) Min Size (Hard Limit): 64 MB (zfs_arc_min) Max Size (Hard Limit): 131072 MB (zfs_arc_max) ARC Size Breakdown: Most Recently Used Cache Size: 6% 8190 MB (p) Most Frequently Used Cache Size: 93% 122881 MB (c-p) ARC Efficency: Cache Access Total: 217693264863 Cache Hit Ratio: 99% 217640359356 [Defined State for buffer] Cache Miss Ratio: 0% 52905507 [Undefined State for Buffer] REAL Hit Ratio: 67% 146336547931 [MRU/MFU Hits Only] Data Demand Efficiency: 99% Data Prefetch Efficiency: 96% CACHE HITS BY CACHE LIST: Anon: 32% 71281340234 [ New Customer, First Cache Hit ] Most Recently Used: 0% 172508676 (mru) [ Return Customer ] Most Frequently Used: 67% 146164039255 (mfu) [ Frequent Customer ] Most Recently Used Ghost: 0% 3430197 (mru_ghost) [ Return Customer Evicted, Now Back ] Most Frequently Used Ghost: 0% 19040994 (mfu_ghost) [ Frequent Customer Evicted, Now Back ] CACHE HITS BY DATA TYPE: Demand Data: 62% 136382108166 Prefetch Data: 0% 1145425065 Demand Metadata: 4% 9980846285 Prefetch Metadata: 32% 70131979840 CACHE MISSES BY DATA TYPE: Demand Data: 19% 10410690 Prefetch Data: 72% 38324623 Demand Metadata: 1% 874219 Prefetch Metadata: 6% 3295975
以下是 vmstat 的輸出:
# vmstat 5 kthr memory page disk faults cpu r b w swap free re mf pi po fr de sr m1 m1 m1 m1 in sy cs us sy id 0 0 0 40892888 93939912 256 1411 165 26 26 0 0 8 1 2 0 5651 274471 42913 2 5 93 0 0 0 22113320 81957648 118 1324 3 0 0 0 0 0 0 0 0 5631 313043 58903 2 35 63 0 0 0 22145624 81977312 353 459 0 746 746 0 0 145 0 0 0 5177 379709 58255 2 33 65 0 0 0 22150976 81982088 120 1329 0 0 0 0 0 1 0 0 0 5200 314711 59490 2 33 65 0 0 0 22147600 81981680 504 1834 0 8 5 0 0 5 0 0 0 5197 334201 58339 2 32 66 0 0 0 22146160 81982544 715 610 0 5 3 0 0 2 0 0 0 6296 364301 58900 2 35 63 0 0 0 22116584 81960496 678 1928 0 3 3 0 0 1 0 0 0 5178 351160 58947 2 34 64 1 0 0 22107080 81949528 95 1095 0 0 0 0 0 0 0 0 0 4531 309206 58450 2 35 63
下面是 zpool iostat 的輸出:
# zpool iostat ntapdatatel 5 capacity operations bandwidth pool alloc free read write read write ----------- ----- ----- ----- ----- ----- ----- ntapdatatel 1.07T 437G 10 13 1.07M 1.01M ntapdatatel 1.07T 437G 0 0 51.2K 4.00K ntapdatatel 1.07T 437G 0 0 0 0 ntapdatatel 1.07T 437G 0 95 0 6.47M ntapdatatel 1.07T 437G 0 0 0 0 ntapdatatel 1.07T 437G 0 0 0 0 ntapdatatel 1.07T 437G 0 0 0 0 ntapdatatel 1.07T 437G 0 0 0 0 ntapdatatel 1.07T 437G 0 0 25.6K 0 ntapdatatel 1.07T 437G 0 87 0 5.16M
和文件系統屬性:
NAME PROPERTY VALUE SOURCE ntapdatatel type filesystem - ntapdatatel creation Sun Oct 28 17:09 2012 - ntapdatatel used 1.07T - ntapdatatel available 413G - ntapdatatel referenced 432G - ntapdatatel compressratio 1.00x - ntapdatatel mounted yes - ntapdatatel quota none default ntapdatatel reservation none default ntapdatatel recordsize 128K default ntapdatatel mountpoint /ntapdatatel local ntapdatatel sharenfs off default ntapdatatel checksum on default ntapdatatel compression off default ntapdatatel atime on default ntapdatatel devices on default ntapdatatel exec on default ntapdatatel setuid on default ntapdatatel readonly off default ntapdatatel zoned off default ntapdatatel snapdir hidden default ntapdatatel aclmode discard default ntapdatatel aclinherit restricted default ntapdatatel canmount on default ntapdatatel shareiscsi off default ntapdatatel xattr on default ntapdatatel copies 1 default ntapdatatel version 5 - ntapdatatel utf8only off - ntapdatatel normalization none - ntapdatatel casesensitivity sensitive - ntapdatatel vscan off default ntapdatatel nbmand off default ntapdatatel sharesmb off default ntapdatatel refquota none default ntapdatatel refreservation none default ntapdatatel primarycache all default ntapdatatel secondarycache all default ntapdatatel usedbysnapshots 0 - ntapdatatel usedbydataset 432G - ntapdatatel usedbychildren 666G - ntapdatatel usedbyrefreservation 0 - ntapdatatel logbias latency default ntapdatatel sync standard default ntapdatatel rekeydate - default ntapdatatel rstchown on default
它可能不是 zfs - 你有很多可用記憶體,所以考慮這種可能性 -
echo 'pg_contig_disable/D' | mdb -k
如果輸出是:
echo pg_contig_disable/D | mdb -k pg_contig_disable: pg_contig_disable: 0
您可能會遇到某種 NUMA 問題。Solaris 10 試圖通過設置記憶體塊以提高記憶體效率來促進更快的記憶體訪問。當您擁有大量記憶體和預言機時,這會導致一種奇怪的情況-就像您所描述的那樣。一個月左右的正常執行時間後,cpu 使用者使用量不多,系統 cpu 時間很多,系統停止執行。長期,將核心參數 pg_contig_disable 設置為 1。
短期修復是重新啟動。如果重新啟動有幫助,您需要設置核心參數。這是具有大量可用記憶體的系統上的已知 Solaris 10 問題。