我的生產服務器上出現獨角獸時出現了一個相當奇怪的問題。 雖然配置文件指出preload_app爲true,但將USR2發送到主進程並不會產生任何響應,並且看起來像獨角獸完全忽略了信號。 在另一臺發送USR2的服務器上,將主進程更改爲(舊)狀態併成功啓動新的主進程。 有問題的服務器使用RVM & bundler,所以我假設它有某種相關性(另一個是香草紅寶石)。 發送除USR2(QUIT,HUP)以外的信號工作得很好。 有沒有辦法跟蹤幕後發生的事情?獨角獸的日誌文件是完全空的。獨角獸完全忽略USR2信號
回答
我在我的VDS上遇到過類似的問題。 Strace'ing透露了原因:
write(2, "E, [2011-07-23T04:40:27.240227 #19450] ERROR -- : Cannot allocate memory - fork(2) (Errno::ENOMEM) <...>
嘗試增加內存容量,內存XEN需求限制(他們在我的情況太用力),或者可能打開overcommit,通過後者可以有一些嚴重的不必要的副作用效果,所以要小心。
我遇到過類似的問題,但是我的日誌清楚地發現了這個問題:發送USR2最初將用於部署,但隨着部署得到清理,Unicorn主機最初啓動的發佈版本將被刪除,發送USR2信號似乎什麼都不做/失敗,與錯誤日誌說明:
派生的子重新執行... 53 /無功/網絡/應用/發行/ 153565b36021c0b8c9cbab1cc373a9c5199073db /供應商/包/紅寶石/1.9.1/gems/unicorn-4.3.1/lib/unicorn/http_server.rb:439:in `exec':沒有這樣的文件或目錄 - /var/www/application/releases/153565b36021c0b8c9cbab1 cc373a9c5199073db /供應商/包/紅寶石/ 1.9.1 /斌/麒麟 (錯誤:: ENOENT)
麟角文件在http://unicorn.bogomips.org/Sandbox.html提到這個潛在的問題:「清理舊版本會導致特定版本的安裝獨角獸失蹤,升級失敗「,在我看來這意味着USR2似乎」無所作爲「。
我使用的是廚師的應用配方來部署應用程序,這將創建一個跨部署共享的符號鏈接vendor_bundle目錄,但調用bundle exec unicorn
仍然導致原麒麟控股高手,其中包括具體的發佈目錄的路徑參考。
爲了解決這個問題,我不得不打電話給bundle exec /var/www/application/shared/vendor_bundle/ruby/1.9.1/bin/unicorn
以確保獨角獸主機有一個二進制路徑,這個二進制文件在一個部署中是有效的。一旦完成,我可以部署給我心臟的內容,並kill -USR2 PID
將按照廣告。
麟角文檔提到您可以手動設置在麒麟配置文件中的以下內容併發送HUP到發送USR2叉新主人面前重裝獨角獸改變二進制路徑參考:Unicorn::HttpServer::START_CTX[0] = "/some/path/to/bin/unicorn"
也許,這是非常有用的對一些處於類似情況的人來說,但我沒有實現,因爲它似乎指定了共享獨角獸二進制文件的絕對路徑就足夠了。
我懷疑你的問題可能是你的Gemfile已經改變了,但你還沒有啓動你的獨角獸,讓USR2使用新的Gemfile。因此,當您嘗試重新啓動應用程序時,它會崩潰。
查看您的/log/unicorn.log
瞭解可能失敗的細節。
如果您使用Capistrano的,指定BUNDLE_GEMFILE作爲符號鏈接,例如:
run "cd #{current_path} && BUNDLE_GEMFILE=#{current_path}/Gemfile bundle exec unicorn -C#{config_path} -E #{unicorn_env} -D"
Here's a PR是這個演示功能。
我總是在新的獨角獸部署中忘記這一點。 'before_exec {| server | ENV [「BUNDLE_GEMFILE」] =「#{app_path}/current/Gemfile」}' – Adam
- 1. 獨角獸不USR2
- 2. 發送USR2信號後忽略信號處理程序
- 3. 重啓獨角獸與USR2 - 戒菸老師傅
- 4. 如何發送USR2信號?
- 5. 帶符號鏈接的獨角獸working_directory
- 6. 獨角獸!和PostgreSQL
- 7. 如何告訴獨角獸瞭解Heroku的信號?
- 8. 獨角獸+ NGINX:無法啓動獨角獸
- 9. -moz-column-span:all; - 完全忽略?
- 10. Git - 完全忽略文件
- 11. SSIS完全忽略Excel列
- 12. 表完全忽略變量
- 13. 讓Proguard完全忽略包
- 14. Hibernate.initialize()被完全忽略
- 15. .htaccess文件完全忽略
- 16. 春/ @Transactional被完全忽略
- 17. 獨角獸未能啓動
- 18. 獨角獸多機設置
- 19. 獨角獸超時處理
- 20. 獨角獸自動死亡
- 21. 設置獨角獸超時
- 22. 獨角獸請求排隊
- 23. kgio /獨角獸失敗
- 24. Django pre_delete信號被忽略
- 25. 忽略「斷管」信號
- 26. 我的信號被忽略!
- 27. 的NodeJS USR2信號使用堆轉儲
- 28. 獨角獸與獨角獸殺手優化提供了最糟糕的表現
- 29. Linux:忽略信號處理程序中的信號,忽略所有這些連續的信號
- 30. 如何讓rails +獨角獸記錄器線程安全?
您可能感興趣strace。我不知道它是否可用於OSX,但它會幫助你達到此目的。 http://linux.die.net/man/1/strace –