Leo Yeh's Blog

SAS 系統管理 (103)

教學目標

初步了解如何解決 SAS Enterprise Guide 長時間處理大量資料發生連線中繼的錯誤問題。

重點概念

首先在企業使用 SAS 軟體的我們習慣透過 SAS Enterprise Guide 整理資料,並且產生 SAS 資料集,以利進行統計分析或模型建立等資料科學人工智慧相關實務應用,但是關鍵在於資料且是大量的資料,此時就會發生當 SAS Enterprise Guide 執行 SAS 程式碼超過半小時以上的時間之後,我們將會發生非預期的錯誤無法針對所要求的資源建立連線導致無法正常產生分析結果的資料表,這將會對於業務單位使用 SAS Enterprise Guide 時造成很大的困擾。

接著我們要如何解決上述問題呢?一開始我們先了解 SAS Enterprise Guide 無法在沒有使用者操作的情況下啟動中斷連線,但是有幾種情況可能會造成連線中繼,主要有三種,分別為:

  1. 網路不穩定 (Network instability):如果客戶端和伺服器之間傳輸的資料包遺失,此時 SAS Enterprise Guide 與 SAS Metadata Server 之間的連線可能會被切斷,從而產生先前描述的錯誤。
  2. 防火牆超時 (Firewall time-outs):當連線保持空閒狀態時,可能會由防火牆中繼空閒連線,如果長時間執行的作業始突然中繼連線,或者 SAS Enterprise Guide 長時間處於打開狀態,則中斷連線將可能來自於防火牆使用空閒連線超時的設定。
  3. 工作站上設定省電模式 (Power-saving modes set on the workstation):Windows 作業系統個人電腦在指定的不活動時段內進入低功耗狀態的情況,這種行為經常發生在筆記本電腦上,如果執行 SAS Enterprise Guide 的個人電腦進入低功耗狀態,則可能已禁用網路卡以節省電量,此時若發生這種情況 SAS Enterprise Guide 與中繼資料伺服器之間的連線將會遺失。

而 SAS Enterprise Guide 主要連線兩個連接埠,分別為中繼資料伺服器 (8561) 和工作區伺服器 (8591),當作業運行很長時間時,雖然 SAS Enterprise Guide 和中繼資料伺服器和工作區伺服器在連接埠上連線保持活動狀態。但是中繼資料伺服器連接埠在作業執行時處於空閒狀態,如果設定傳輸控制協議(TCP)超時以中斷空閒連接,則會中斷它,如果防火牆是中斷連線的根因,則可以透過增加為防火牆設置的超時間隔來阻止中斷連線的發生。

再來我們可以在工作區伺服器上設定 keepalive 參數,以利確保防火牆不會中斷不活動的已連接的客戶端, 所謂 keepalive 參數主要是定期向非活動的客戶端發送事件包,以防止網路防火牆中斷連線,其中事件包的間隔主要以秒為單位,最小值為 30 秒,零值將關閉 keepalive 參數,至於修改步驟為:

  1. 開啟「SAS Management Console」工具,登入「sasadm@saspw」帳號密碼。
  2. 在「Server Manager」->「SASApp」->「SASApp - Logical Workspace Server」上按右鍵選擇「Properties」。
  3. 在「Option server parameters」參數中輸入「keepalive=300」代表每五分鐘發送事件包防止網路防火牆中斷連線,按下「OK」。

當設定完成上述設定之後,我們需要關閉再重新啟動 SAS Enterprise Guide 才會生效,以利我們透過 SAS Enterprise Guide 長時間處理大量資料,此外請注意最新版本的 SAS Enterprise Guide,現在預設超時為 30 分鐘,所以 keeplive 的時間必須小於 30 分鐘,至於 SAS Enterprise Guide 的超時可以在 SAS Enterprise Guide 的「Options」->「Data」->「Performance」中勾選「Close data grid after period of inactivity (specify in minutes):」,輸入超時時間以分鐘為單位進行修改 。

最後 SAS Enterprise Guide 無法重新建立與中繼資料伺服器的新連線,若要維護使用者的連線,則 SAS Enterprise Guide 必須保持與中繼資料伺服器的連線,若是該連線中斷就無法重新建立連線,並且發生錯誤,以及 SAS 日誌無法提供有關中斷原因的任何資訊,因為當連線中斷時 SAS 日誌只能顯示連線已中斷。

相關資源

⬅️ Go back