Open Directory的slapd程序於OS X系統的10.8.5版本出現Memory Leak 和 100% CPU Loading情況

如在OS X系統的10.8.5版本上使用Open Directory,相信一定會遇過伺服器無緣無故當機的情況,而第一次出現當機的時候一定是毫無頭緒,摸不清到底甚麼在影響伺服器的運作。為了解決這個問題,首先可使用一些簡單的指令檢查一下伺服器資源的使用情況。

$ ps aux

或可使用crontab寫成日誌記錄特定時間內的資訊

$ crontab -e
# 將指令執行顯示的資訊寫成日誌
* * * * * ps aux>"log/$(date).log"

當下一次當機重啓伺服器後,打開當機前最後一個日誌檔,相信便可以一目了然,查看到Open Directory服務有一個名為slapd的程序使用CPU和Memory的資源都十分高,最終導致伺服器當機。

為了解決這個問題,如條件允許的話可以嘗試升級系統版本簡單解決(而本人目前未嘗試過進行升級,所以無法測試)。另外還有一個方法可暫時性解決問題,可透過排程工作定時重啓Open Directory,釋放sladp程序所佔的資源,讓伺服器不會因資源負荷過高而當機。

根據如下部驟設置排程工作。

  1. 進入排程工作的目錄
    $ cd /Library/LaunchDaemons
    
  2. 建立自訂的排程工作
    sudo touch com.yourname.restartslapd.plist
    
  3. 開啓編輯自訂的排程工作
    sudo vim com.yourname.restartslapd.plist
    
  4. 為自訂的排程工作檔案鍵入如下內容
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
      <key>Label</key>
      <string>com.yourname.restartslapd</string>
    
      <key>ProgramArguments</key>
      <array>
      <string>/Users/Shared/scripts/killstartslapd.sh</string>
      </array>
    
      <key>Nice</key>
      <integer>1</integer>
    
      <key>StartCalendarInterval</key>
      <dict>
      <key>Hour</key>
      <integer>1</integer>
      </dict>
    
      <key>RunAtLoad</key>
      <true/>
    
      <key>StandardErrorPath</key>
      <string>/tmp/restartslapd.err</string>
    
      <key>StandardOutPath</key>
      <string>/tmp/restartslapd.out</string>
    
    </dict>
    </plist>
    
  5. 建立並編輯執行程序的腳本
    [cod]
    $ touch /Users/Shared/scripts/killstartslapd.sh
    $ vim /Users/Shared/scripts/killstartslapd.sh
    [/code]
  6. 為腳本檔案鍵入如下內容
    #!/bin/bash
    date >> /tmp/restartslapd.out
    echo "restarting slapd..."
    pkill slapd
    sleep 5
    /usr/libexec/slapd -d 255
    echo "completed!"
    
  7. 載入至launchctl使其可開機啓動
    $ sudo launchctl load com.yourname.restartslapd.plist
    
  8. 透過指令查詢自訂的排程工作是否於launchctl列表中
    $ sudo launchctl list
    

如讀者有更好的解決辦法,歡迎分享給有需要的人。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

驗證碼 * Time limit is exhausted. Please reload CAPTCHA.

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料