****欧欧美毛片4,国产午夜精品视频,97视频在线观看免费视频,久久七国产精品

數據恢復咨詢熱線:400-666-3702??

歡迎訪問南京兆柏數據恢復公司,專業數據恢復15年

兆柏數據恢復公司

?常見問題

?當前位置: 主頁 > 常見問題

苦惱的數據庫主機重啟問題排查與解決

瀏覽量: 次 發布日期:2023-09-07 09:12:56

苦惱的數據庫主機重啟問題排查與解決


  情況是這樣的,有一套測試數據庫所在的主機在最近幾個月,每個月都會重啟一至兩次,由于數據庫配置了開機自啟動,且每次重啟時間都比較短暫,便沒有得到重視。最近由于測試人員的反饋,每當主機重啟后呢會導致大片的測試應用由于斷連導致無法使用,每次都需要重啟應用才會好。那么我們就需要介入認真排查一下問題所在了,恰巧最近一次的重啟時間為

  11 月 10 日 18:29 左右,需要針對此問題分析 os 重啟原因。

  測試數據庫所在的主機每個月都會重啟一至兩次,主機重啟時數據庫 alert 沒有任何日志,操作系統日志沒有異常信息,監控平臺也是到每次重啟前就無法獲取到數據了,由于操作系統層參數配置,每次宕機都會生成 core dump。

  cat /etc/sysctl.conf | grep core

  kernel.core_pattern = /home/backup/crash/core-%e-円%s-%t

  AWR 報告分析

  因為數據庫因 os 重啟而重啟了,所以跨宕機時間點的 AWR 報告無法采集,只能采集宕機前的 AWR 報告,即 11 月 10 日

  17:00—18:00,從這個時間段 AWR 報告來看,數據庫負載不算太高,且數據庫各指標也都比較正常,因為這個 AWR

  報告距離宕機時間還有半個小時,所以也無法準確體現宕機時間點的數據庫狀態。ASH 報告分析

  通過收集到的 ASH 信息,當時數據庫基本上是忙于 CPU 的調度與等待,“CPU + Wait for CPU” 等待事件比較多,但想要查看進一步的信息就沒有了。

  數據庫日志分析

  宕機時間點附近 alert 日志、數據庫監聽日志均沒有異常信息打印。OSW 日志分析

  OSWatcher 使用簡介

  OSW 是用于采集 OS 性能指標的工具,調用 OS 的命令,對 OS 資源的占用可以忽略不計。

  OSW 包含兩個組件:

  oswbb  : 一組 shell 腳本,采集 OS 的性能指標數據。

  oswbba : java 工具,分析 oswbb 采集的數據,提供一些建議,根據采集的數據繪制 CPU,內存,網絡,I/O 的曲線圖。

  因為在上一次宕機也就是 11 月 2 日之后我部署了 OSW 工具,現在就可以看看宕機前的幾分鐘 OSW 抓取到的數據,以此數據來分析宕機前 OS 狀態。

  從宕機前收集到的 OSW 數據來看,IO 和 CPU 的使用率是比較正常的,但 free memory 只有 300M 多了,初步判斷可能和操作系統內存有關。收集特定時間段的 OSW 數據

  查看 OSW 的數據存儲位置

  收集指定時間段的日志,例如:

  使用 oswbba 分析 OSW

  注意要打開圖形化

  分析 archive 目錄下的所有 OSW 數據采集文件,并生成 HTML 報告。

  指定時間段分析 archive 目錄下的 OSW 數據采集文件,并生成 HTML 報告。

  打開圖形化界面然后執行 oswbba.jar 便會生成類似于下面的 gif 圖形,通過此趨勢圖可以看到 18:28 分左右內存和 Swap 出現峰值,也說明當時內存使用過多了。

  參考文檔:

  OSWatcher (Includes: [Video]) (文檔 ID 301137.1)

  OS Watcher User’s Guide (文檔 ID 1531223.1)

  OSWatcher Analyzer User Guide (文檔 ID 461053.1)操作系統日志分析

  宕機時間點附近 /var/log/messages 中也沒有異常信息打印。

  那么基于上面的這些信息基本上排查不到什么有用的信息了,唯一能有突破的就是前面說的每次重啟都生成的 core 文件了。我們知道在 Linux

  系統中,如果進程崩潰了,系統內核會捕獲到進程崩潰信息,然后將進程的 coredump 信息寫入到文件中,這個文件名默認是 core

  。存儲位置與對應的可執行程序在同一目錄下,文件名是core,大家可以通過下面的命令看到 core 文件的存在位置,如下我的配置是在

  /home/backup/crash/ 目錄下。

  cat /proc/sys/kernel/core_pattern

  /home/backup/crash/core-%e-円%s-%t

  core 文件需要 gdb 命令打開分析,這里就不班門弄斧了,專業的事交給專業的人去干,通過系統工程師的分析,OS 所在主機的安全狗

  watchdog 進程夯 120 秒導致主機重啟。這里就要說明下為何夯 120 秒主機就會重啟,因為配置了操作系統參數

  kernel.hung_task_panic = 1 導致主機重啟了。

  kernel.hung_task_panic

  操作系統工程師配置了這個內核參數 kernel.hung_task_panic=1 ,官方意思是如果內核有進程處于 D 狀態在 120s

  內都沒有被調度,則默認會觸發 panic,說的通俗易懂點就是配置這個參數時當主機有進程夯 120

  秒時就會觸發主機重啟機制。那么問題就很明白了,每次的重啟都是由于有進程夯了 120 秒觸發了這個參數的設置導致主機重啟。如果要關閉 hung

  task panic,則可以設置內核參數 kernel.hung_task_panic=0

  進行關閉。所以這里呢我也就將這個參數注釋掉,默認值就是 0。

  系統工程師通過 crash 工具分析 core dump 可以看到宕機時的 os 內存使用已經達到了 98%,并且 swap 也已經使用了 68%。

  由此基本上可以看到是由于內存耗盡導致重啟了。然后進一步檢查數據庫內存參數配置,目前此虛擬機的物理內存為 32G,sga

  16G,pga  4G ,沒有配置內存大頁,數據庫參數 processes 設置為 2000,pga_aggregate_limit

  沒有值。那么在這種配置下數據庫連接數比較多的情況下,每個數據庫連接占用 3-5m 內存多達 1000 多個鏈接的情況下在出現幾個排序的大

  SQL,很容易把內存占完。

  通過以上的分析,基本可以確定,數據庫主機宕機的原因是內存不足導致,一來操作系統內存 32G 對數據庫而言沒有限制,二來數據庫存在大量連接會話,大量低效 SQL 占用大量內存空間導致內存資源不足。

  建議:

  1、增加主機物理內存,從現在的 32G,增加至 64G;

  2、調整 SGA 和 PGA 大小并設置 pga_aggregate_limit;

  3、開啟內存大頁;

  4、在操作系統層面對數據庫內存使用進行限制;

  5、取消內核參數 kernel.hung_task_panic

  先調整數據庫 SGA 和 PGA 大小。參數 PGA_AGGREGATE_TARGET 起到的是目標的作用,而非限制實際 PGA

  大小,參數 PGA_AGGREGATE_LIMIT 是 12c 以后開始的新參數,可以對 PGA 的內存使用量作“硬性規定”。如果 PGA

  超過了 PGA_AGGREGATE_LIMIT 值,那么 Oracle 內部按照以下順序,中斷或者終止使用了最多不可優化的 PGA 內存(the

  most untunable PGA)的會話或進程:

  CKPT 進程會檢查(每三秒檢查一次)并停掉使用了最多不可優化 PGA 內存的會話調用;

  如果 PGA 內存使用量仍超過 PGA_AGGREGATE_LIMIT,則 CKPT 進程會終止使用了最多不可優化 PGA 內存的會話和進程.

  在 Oracle 12.1 的版本中會選擇以下三種情況中最大的值作為PGA_AGGREGATE_LIMIT 的值:

  1)2 GB

  2)PGA_AGGREGATE_TARGET 值的 2 倍

  3)參數 PROCESSES 的值 * 3MB

  另外需要注意的是:該參數不會超過物理內存大小減去總 SGA 大小的 120%。

  在 18c 以后的版本中,PGA_AGGREGATE_LIMIT 的值計算方法大概是如下的公式:

  PGA_AGGREGATE_LIMIT = (原始 PGA_AGGREGATE_LIMIT 值) + ((最大連接進程數) * 4M)

  所以本次調整虛擬機內存為 64G 后,設置 SGA、PGA 參數如下:

  然后需要開啟內存大頁

  vm.min_free_kbytes 這個參數可以控制預留給虛擬機多少內存,設置的太小會出現死鎖,設置的過大會出現 OOM。為了滿足

  PF_MEMALLOC,需要一些最小的內存分配;如果您將其設置為低于1024KB,系統將會變得微妙地破碎,并且在高負載下容易死鎖,設置過高會使你的機器立即

  OOM;通常經驗值是設置物理內存的 2%-5% 以內,單位是 KB,通常情況下 32G 內存配置 2G,64G 內存配置 5G 即

  5242880 ,128G 內存 10G 即可。

  參考鏈接:https://www.kernel.org/doc/Documentation/sysctl/vm.txt

  內存大頁,大內存頁,標準大頁等均是同一個東西,之前寫的《Linux 透明大頁 THP 和標準大頁 HP》一文有過詳細介紹,這里就不再介紹了。

  memlock 參數指定用戶可以鎖定其地址空間的內存量。在 /etc/security/limits.conf 文件中添加 memlock 的限制,一般情況下該值略微小于實際物理內存的大小(單位為 KB),我的物理內存是 64GB,可以設置為如下:

  通過以上設置后就可以關機修改內存至 64G 然后開機檢查數據庫狀態了。

  經過以上設置,觀察了一個多月的時間沒有出現過重啟或者資源不足的情況,在此簡單記錄一下排查過程以及用到的知識點,希望以后遇到類似的問題可以參考參考,如果小伙伴們有不同意見或建議,歡迎一起交流。

 

 

相關推薦