프로덕션 서버에서 유니콘과 관련하여 다소 이상한 문제가 있습니다. config 파일에 preload_app가 true라고 표시되어 있지만 USR2를 마스터 프로세스로 보내면 응답이 생성되지 않으며 유니콘이 신호를 모두 무시하는 것처럼 보입니다. USR2를 보내는 다른 서버에서 마스터 프로세스를 및 (이전) 상태로 변경하고 새 마스터 프로세스를 성공적으로 시작합니다. 문제가있는 서버가 RVM & bundler를 사용하고 있으므로 어떻게 든 관련이 있다고 가정합니다 (다른 하나는 바닐라 루비입니다). USR2 (종료, HUP) 이외의 신호를 보내는 것은 정상적으로 작동합니다. 여기 뒤에서 무슨 일이 일어나고 있는지 추적 할 수있는 방법이 있습니까? 유니콘의 로그 파일은 완전히 비어 있습니다.유니콘이 USR2 신호를 완전히 무시합니다.
답변
내 VDS에서 비슷한 문제가 발생했습니다.
write(2, "E, [2011-07-23T04:40:27.240227 #19450] ERROR -- : Cannot allocate memory - fork(2) (Errno::ENOMEM) <...>
시도 수요 한계에 메모리 크기, XEN 메모리 (그들은 너무 열심히 내 경우에 있었다) 증가, 아니면 심각한 원치 않는 측면이있을 수 있습니다 후자를 통해 overcommit 켜 : Strace'ing 원인을 밝혀 효과가 있으므로 조심해서하십시오.
비슷한 문제가 발생했으나 로그를 통해 USR2를 처음 보내는 것이 처음에는 배포 작업을 수행하지만 배포가 완료되면 처음에 Unicorn 마스터가 시작된 릴리스가 삭제되므로
갈래 아이를 다시 실행 ... 53 의/var/www가/응용 프로그램/출시/153565b36021c0b8c9cbab1cc373a9c5199073db/공급 업체/번들/루비를하십시오 USR2 신호를 보내는 알리는 오류 로그에 아무것도 /가 실패하지 할 나타납니다 /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/빈/유니콘 (errno를 :: 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
은 광고 한대로 작동합니다. Unicorn::HttpServer::START_CTX[0] = "/some/path/to/bin/unicorn"
는 아마도이 유용
유니콘 문서는 수동으로 유니콘 설정 파일에 다음을 설정하고 HUP는 새 마스터를 포크 할 USR2를 보내기 전에 유니콘를 다시로드 전송하여 바이너리 경로 참조를 변경할 수 있습니다 언급 비슷한 상황에있는 일부 사람들에게는 공유 된 유니콘 바이너리의 절대 경로를 지정하는 것으로 충분하므로이를 구현하지 않았습니다.
Gemfile이 변경되었지만 USR2가 새 Gemfile을 사용할 수있는 방식으로 유니콘을 시작하지 않았다고 의심됩니다. 따라서 앱을 다시 시작하려고하면 충돌이 발생합니다.
무엇이 실패했는지에 대한 자세한 내용은 /log/unicorn.log
을 확인하십시오.
당신이 카피 스트라 노를 사용하는 경우 :, 심볼릭 링크로이 demostrates
run "cd #{current_path} && BUNDLE_GEMFILE=#{current_path}/Gemfile bundle exec unicorn -C#{config_path} -E #{unicorn_env} -D"
Here's a PR을 예컨대을 BUNDLE_GEMFILE를 지정합니다.
나는 새로운 유니콘 배치에서 이것을 항상 잊어 버린다. 'before_exec {| 서버 | ENV [ "BUNDLE_GEMFILE"] = "# {app_path}/현재/Gemfile"}' – Adam
- 1. 유니콘이 상쾌한 보석을 말하고 있습니다.
- 2. GTK 신호를 생성하고 GTK 신호를 내가 만들려고하고
- 3. PyQt 신호를 올바르게 사용하기.
- 4. 어떤 경우에는 SIGCHLD를 무시하지만 다른 경우는 무시합니다.
- 5. 오리엔테이션을 무시합니다.
- 6. 들어오는 신호를 캡처
- 7. LabVIEW가 Qt 신호를 차단합니까?
- 8. 객관적인 C 메시지를 무시합니다.
- 9. NSNotification 완전히
- 10. django에서 db 신호를 생성하는 방법
- 11. 웹 페이지에 신호를 보내는 방법
- 12. Tk에서 최대화 신호를 잡는 방법?
- 13. sigprocmask()는 UNIX에서 신호를 차단합니다.
- 14. Qt QNetworkAccessManager가 신호를 방출하지 않습니다.
- 15. pygtk에서 새 신호를 만드는 방법
- 16. iPhone에서 WiFi 신호를 확인하는 방법
- 17. 헤드폰 케이블을 통해 신호를 보냅니다.
- 18. PIC18F에서 IR 신호를 수신하는 방법
- 19. 신호를 사용하여 장고 등록 확장하기
- 20. 다른 스레드에서 신호를 내보내는 중
- 21. PyQt : 신호를 단일 슬롯에 통합
- 22. 루프에서 PyQt4의 슬롯과 신호를 연결하십시오.
- 23. Django - 신호를 미리 렌더링 하시겠습니까?
- 24. valgrind 내부 프로세스로 신호를 보내시겠습니까?
- 25. sigaction을 사용하여 POSIX 신호를 학습하십시오.
- 26. QT 신호를 연결할 수 없습니다
- 27. pygtk : 신호를 수동으로 내보내는 방법
- 28. Response.Redirect가 URL 인코딩을 간혹 무시합니다.
- 29. grep은 임시 파일을 무시합니다.
- 30. 조건부 Mercurial 파일을 무시합니다
strace에 관심이있을 수 있습니다. 나는 그것이 OSX에 대해 사용할 수 있는지는 모르겠지만, 당신이 이것의 바닥에 도달하는 데 도움이 될 것입니다. http://linux.die.net/man/1/strace –