Java 啟動含有 Log4Cxx 的外部程式導致該程式掛起

來源:互聯網
上載者:User

今天為這件事情折騰了一天!

我用 Java 寫的中介軟體,會根據使用者的需要,啟動一個子進程,這個進程是用 C++ 寫的,正好用到了 Log4Cxx 來記錄日誌以便分析。這個進程,單獨從控制終端運行,沒有任何問題;但是一旦用 Java 啟動子進程的方式來啟動,則這個子進程剛一啟動就阻塞不動了,然後大概等上幾十分鐘到兩個小時不等,該子進程則又能順利執行下去。

第一次碰到這樣的問題,很怪異,經過反覆測試及萬能的 Google 幫忙,找到Java調用外部程式掛起原因,Log4Cxx 原來是罪魁禍首,因為它重新導向了大量的日誌資訊到控制台,由於 Java 進程沒有清空程式寫到緩衝區的內容,結果導致程式一直在等待。

解決這個問題有兩個辦法:

  1. 按上文中的說法,在遇到 Java 啟動外部程式而導致線程阻塞的時候,可以考慮使用兩個線程來同時清空 process 擷取的兩個輸入資料流;
  2. 直接把 Log4Cxx 重新導向到控制台的日誌訊息給取消掉,這個可以通過 Log4Cxx 的設定檔來實現。

問題搞定了,世界又變得很美好了!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.