Leo Yeh's Blog

SAS 系統管理 (114)

教學目標

初步了解如何解決 SAS LASR Analytic Server 伺服器崩潰問題的基本概念。

重點概念

首先當 SAS LASR Analytic Server 伺服器發生持續性的崩潰,除了檢查干擾 SAS LASR Analytic Server 的網路或 SSH 連線設定之外,我們更能夠透過以下五個步驟來嘗試解決此問題,分別為:

  1. 確認 LASR 伺服器資源限制。
  2. 確認 ETL 資料批次的排程。
  3. 確認資料處理相關記錄檔。
  4. 確認使用頻繁的報表設計。
  5. 確認根本原因重現崩潰情況。

接著 SAS LASR Analytic Server 伺服器通常需要與其它程序或同一叢集中的其它伺服器共享資源,並且在伺服器啟動時將會讀取「/opt/TKGrid/resource.settings」設定檔,預設為停用所有設定,其中我們主要能夠針對以下設定值進行相關設定,請參考下表。

參數設定 設定檔路徑 註解
TKMPI_MEMSIZE /opt/TKGrid/resource.settings 在記憶體中資料表的處理和限制。
TKMPI_ULIMIT /opt/TKGrid/resource.settings 在虛擬記憶體中所有資料表的處理和限制內存。
ulimit /etc/securty/limits.conf 主要限制使用者和群組可用的虛擬記憶體大小。
cgroups /etc/cgconfig.conf 主要限制使用者可用的 CPU ,請注意不要使用 cgroup 設定記憶體,伺服器可能會被關閉導致無法回應。

此外我們也能夠在 SAS Visual Analytics Administrator 中設定資料表限制,以及在 SAS Environment Manager 中設定 LASR 記憶體限制的選項,主要有兩個,分別為:

  1. Data loading (%):主要設定伺服器上已經使用的記憶體百分比,若超過該記憶體的資料表將無法載入至記憶體中,此外如果伺服器上的 SAS LASR Analytic Server 或任何其它程序超過此值,則會導致增加資料表的相關操作失敗,至於預設值為 80% 主要代表伺服器上使用的記憶體不超過 80% 時才能載入資料表,如果將此字段保留為空白,則會被設定為 75%。
  2. External processes (%):主要設定伺服器上已經使用的記憶體百分比,若超過該外部程序將無法從伺服器中檢索資料表,至於預設值為 80% 主要代表伺服器上使用的記憶體不超過 80% 時外部程序才能夠從伺服器中檢索資料表,如果將此字段保留為空白,則會被設定為 75%。

再來確認 ETL 資料批次的排程,主要重點在於觀察批次執行當下的磁碟存取的輸入和輸出量,如果磁碟存取的輸入和輸出量高達 99% 以上將會導致 LASR 伺服器出現「INFO: task : blocked for more than 120 seconds」錯誤訊息,此時 Linux 作業系統核心將會自動停止伺服器,此外當出現此錯誤訊息時通常代表系統正處於磁碟或記憶體擁塞的情況,並且程序正在耗盡可用的資源,請注意這些消息可以警告某些操作可能無法達到最佳狀態,它們不一定表示嚴重的問題,並且任何阻塞的程序最終都應在系統恢復時繼續進行,但是有些程序就會當 120 秒無回應時就會被 Linux 作業系統核心將會自動停止伺服器,當然我們能夠透過「sysctl kernel.hung_task_timeout_secs = 0」設定為停用此功能,但是不建議這樣做,或者調大秒數為暫時的解決方案。此外我們更能夠確認 LASR 伺服器所產生資料處理相關記錄檔,預設目錄主要為「/tmp」,在記錄檔中主要會顯示以下欄位資訊,請參考下表。

欄位名稱 說明
ID 唯一識別碼
PID 作業系統處理程序識別碼
SASTime 本地執行時間 (SAS 時間日期格式)
Time 本地執行時間 (一般時間日期格式)
User 使用者
Host 主機名稱
LASRServer 伺服器的簽章檔案
Port 伺服器偵聽的網路連接埠
RawCmd 伺服器接收請求
ExeCmd 伺服器執行命令
JnlMsg 日誌緩衝中的錯誤訊息
StatusMsg 狀態完成訊息
RunTime 持續處理時間 (以秒為單位)

最後我們為了要確認使用頻繁的報表,因為報表將會在 SAS LASR Analytic Server 伺服器中進行資料處理和資料分析,將很有可能會導致崩潰,主要能夠透過以下 Linux Shell 指令查看在某一天的某個小時內有多少人存取報表,我們能夠將產生出的「report.csv」檔案轉換為 Excel 檔案,以利針對問題發生的時間進行過濾和篩選,更進一步找出有問題的報表。此外我們能夠開啟 SAS Environment Manager 驗證可能有問題報表在開啟的當下是否會導致虛擬記憶體使用量快速增加,並且當增加至 70% 以上時,將會發生 LASR 伺服器崩潰的情況。

1
cat /opt/sas/config/Lev1/Web/WebAppServer/SASServer12_1/logs/localhost_access_log..2019-10-*.txt | grep getData?key= | awk '{split($0,a," ");print a[2] a[3] a[4]  a[7]}' | sed 's/--//g' | sed 's/\[//g' | perl -pe 's/\+/ /g; s/%([0-9a-f]{2})/chr(hex($1))/eig' | awk '{split($0,a,"/");print a[1] a[2] a[3] a[10] a[11] a[12]}' | awk '{split($0,a,"&");print a[1] a[2]}' | sed 's/ //g' | awk '{split($0,a,"reportDate");print a[1]}' | awk '{split($0,a,":");print a[1] a[2]","substr(a[4],3,100)}'|awk -F, '{a[$1,$2]++;}END{for (i in a)print i","a[i];}'| awk '{print substr($1,1,11)","substr($1,12)}' | sed 's/Jan/1/g' | sed 's/Feb/2/g' | sed 's/Mar/3/g' | sed 's/Apr/4/g' | sed 's/May/5/g' | sed 's/Jun/6/g' | sed 's/Jul/7/g' | sed 's/Aug/8/g' | sed 's/Sep/9/g' | sed 's/Oct/10/g' | sed 's/Nov/11/g' | sed 's/Dec/12/g' | awk '{print substr($1,5,4)"/"substr($1,3,2)"/"substr($1,1,2)","substr($1,9,2)","substr($1,12)}' | sort > /tmp/report.csv

相關資源

⬅️ Go back