Cache

Solaris 10 ZFS ARC 已用盡且 CPU 過載

  • October 31, 2014

我們已經在 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 問題。

引用自:https://serverfault.com/questions/640043