2013-09-05 50 views
0

我已經搜索了三個小時,但無濟於事。`ejabberdctl start`導致「kernel pid terminated」錯誤 - 我該怎麼辦?

我有一個ejabberd安裝不使用apt安裝。它從源代碼安裝,並沒有名爲ejabberd的程序。開始和停止,一切都通過ejabberdctl。

有人一個月運行完美,突然有一天它與臭名昭著

kernel pid terminated error 

隨時停止我做

sudo ejabberdctl start --node [email protected] 

一個erl_crash文件被產生,當我嘗試

ejabberdctl 

我得到

Failed to connect to RPC at node [email protected] 

現在什麼都我想

  1. 試圖殺死ejabberd,梁的所有正在運行的進程,EPMD和新鮮的開始 - 沒有工作
  2. 經過/ etc/hosts和主機名,一切都很好。主機名在主機提供的IP
  3. 經過的ejabberdctl.conf文件,以確保德主機名的文件確實是正確的和節點名稱是正確
  4. 被查.erlange.cookie文件正在與內容在它
  5. 創建

在所有網絡上,搜索引導我到上述任何一個。

我無處可去,不知道還有什麼地方可以看。任何幫助將非常感激。

+0

你確定沒有在標準(或配置)端口(5222,5296,523等)上監聽嗎?我的意思是,雖然沒有'ejabberd'的實例正在運行。 – kostix

回答

1

您必須分析故障轉儲以嘗試猜測它失敗的原因。

要完成這項任務,二郎神有一個特殊的webtool(叫,呃,webtool)從一個特殊的應用—崩潰轉儲查看器—可能被用於在加載轉儲和檢查Erlang進程的堆棧跟蹤墜機時間。

你必須

  1. 安裝必要的程序包:

    # apt-get install erlang-webtool erlang-observer 
    
  2. 啓動一個Erlang解釋:

    $ erl 
    

    (進一步行動採取有)

  3. 運行webtool。在最簡單的情況下,它將在本地主機上偵聽:

    webtool:start(). 
    

    (注意期間。)它將打印一個URL,以在瀏覽器中導航到達正在運行的工具。

    如果這種情況發生在服務器上,你寧願喜歡有一些非本地主機接口上的webtool聽,呼叫encantation將是棘手:

    webtool:start(standard_path, [{port, 8888}, {bind_address, {0, 0, 0, 0}}, {server_name, "server.example.com"}]). 
    

    {0, 0, 0, 0} IP規範將讓它無處不在,並且你還可以指定一些更明智的八位字節,如{192, 168, 0, 1}server_name子句可能使用任意名稱—這是將在生成的URL(服務器的主機名)中打印的內容。

  4. 現在使用您的瀏覽器連接到該工具,導航到「開始工具」菜單項,啓動崩潰轉儲查看器並將其鏈接到工具的頂部菜單中。在那裏繼續並找到加載故障轉儲的鏈接。

  5. 加載故障轉儲後,嘗試使用該工具的界面來查看活動的Erlang進程的堆棧跟蹤。至少其中一個應該包含一些可疑的東西,其中應該包含一條錯誤消息—,這就是你正在尋求改進你的問題(或詢問另一個在ejabberd mailing list)。

  6. 要退出工具,在運行的Erlang解釋器中運行

    webtool:stop(). 
    

    。然後通過運行

    q(). 
    

    ,並等待一個位或按Ctrl-g,然後進入依次按下回車鍵的字母q退出,要麼。

相關鏈接:在crash dump viewer manualwebtool manual

相關問題