2011-07-06 2 views
15

프로덕션 서버에서 유니콘과 관련하여 다소 이상한 문제가 있습니다. config 파일에 preload_app가 true라고 표시되어 있지만 USR2를 마스터 프로세스로 보내면 응답이 생성되지 않으며 유니콘이 신호를 모두 무시하는 것처럼 보입니다. USR2를 보내는 다른 서버에서 마스터 프로세스를 및 (이전) 상태로 변경하고 새 마스터 프로세스를 성공적으로 시작합니다. 문제가있는 서버가 RVM & bundler를 사용하고 있으므로 어떻게 든 관련이 있다고 가정합니다 (다른 하나는 바닐라 루비입니다). USR2 (종료, HUP) 이외의 신호를 보내는 것은 정상적으로 작동합니다. 여기 뒤에서 무슨 일이 일어나고 있는지 추적 할 수있는 방법이 있습니까? 유니콘의 로그 파일은 완전히 비어 있습니다.유니콘이 USR2 신호를 완전히 무시합니다.

+0

strace에 관심이있을 수 있습니다. 나는 그것이 OSX에 대해 사용할 수 있는지는 모르겠지만, 당신이 이것의 바닥에 도달하는 데 도움이 될 것입니다. http://linux.die.net/man/1/strace –

답변

0

내 VDS에서 비슷한 문제가 발생했습니다.

write(2, "E, [2011-07-23T04:40:27.240227 #19450] ERROR -- : Cannot allocate memory - fork(2) (Errno::ENOMEM) <...> 

시도 수요 한계에 메모리 크기, XEN 메모리 (그들은 너무 열심히 내 경우에 있었다) 증가, 아니면 심각한 원치 않는 측면이있을 수 있습니다 후자를 통해 overcommit 켜 : Strace'ing 원인을 밝혀 효과가 있으므로 조심해서하십시오.

5

비슷한 문제가 발생했으나 로그를 통해 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를 보내기 전에 유니콘를 다시로드 전송하여 바이너리 경로 참조를 변경할 수 있습니다 언급 비슷한 상황에있는 일부 사람들에게는 공유 된 유니콘 바이너리의 절대 경로를 지정하는 것으로 충분하므로이를 구현하지 않았습니다.

10

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를 지정합니다.

+0

나는 새로운 유니콘 배치에서 이것을 항상 잊어 버린다. 'before_exec {| 서버 | ENV [ "BUNDLE_GEMFILE"] = "# {app_path}/현재/Gemfile"}' – Adam

관련 문제