2011-03-16 3 views
0

배포 된 레일 웹 서버를 실행 중이며 메모리 문제가 발생합니다. 센드 메일을 호출 할 때마다 Errno :: ENOMEM 오류가 발생합니다. 내 서버에서 'top'을 실행하면 2 개의 ruby1.8 프로세스가 실행 중이며 각각 메모리의 약 40 %를 소화합니다. 이것은 내 코드의 누출로 인한 것입니까, 아니면 동시에 두 개의 루비 프로세스를 시작 했습니까?루비 및 레일 성능 문제, 서버

두 프로세스 모두 내 배포자 계정에 의해 실행되며, 다음은 프로덕션 git 저장소 (pushand 사용)로 푸시 할 때 호출됩니다. 나는 이것이 자연스러운 것인지 (예 : 서버를 업그레이드해야하는지) 알기 위해 노력하고 있습니다. 또는 설치 과정에서 어떤 종류의 결함이 있는지 확인하려고합니다. 최근에 RAM을 256 MB에서 512 MB로 업그레이드했는데 이전에는이 ​​문제가 없었습니다.

활성화 이메일을 받아야 할 때 응용 프로그램에서 오류가 발생하므로 방문자가 사용자를 만들지 못하는 문제가 있습니다.

아파치와 승객이있는 우분투 설정에서 레일즈 2.1.0을 실행 중입니다.

+0

아파치 메모리 사용을 재개하면 극적으로 저하됩니다. PoolIdleTime 설정을 1 일에서 300 초로 단축 했으므로 여객 프로세스가 계속 죽을 것입니다. – kalusn

+0

Rack :: Bug, Oink 및 Memorylogic도 살펴 보았습니다. 나는 [link] (http://www.engineyard.com/blog/2009/thats-not-a-memory-leak-its-bloat/)가 매우 유용하다는 것을 알았다. – kalusn

+0

문제는 여전히 지속됩니다. 시도하고 최적화 영역을 시도하고 대답을 찾으면 여기로 돌아옵니다. – kalusn

답변

2

자, 나는 이것이 내가 자신을 도와야 만했던 경우 중 하나라고 생각한다. 실제로 나는 내가 기뻐했다. 나는 내가 연결된 도구를 사용하지 않았다.

나는을 (를) 통해 내 서버에 로그인했습니다. ssh를 실행하고 두 개의 화면 창에서 top과 tail -f /var/www/mysite.com/log/production.log의 두 명령을 실행했습니다.

라이브 로그 파일을보고로드하는 데 시간이 오래 걸린 페이지 요청 (사용자가 자신의 이름으로 식별 된 이미지를 표시 할 수있는 페이지)을 확인했습니다. acts_as_taggable_on. 이 단일 요청에는 6 초가 걸렸습니다.

계속 나타났습니다. 나는 그것을 6 ~ 7 번 봤다고 생각하고, 더 깊이 조사하기로 결정했다. 항상 동일한 사용자 ID 였으므로 사용자를 조회하기로했습니다. 또한, 사용자는 "빈 이름을했다 밝혀," ", 그리고 태그 이미지 내 응용 프로그램에서 이제

Asset.tagged_with(@user.name, :on => "users") 

에 의해 발견되고, 수천 개의 자산의 10 초는이 있고, Asset.tagged_with (": on => "users") 모든 것을 반환하므로 내 기억을 포기합니다.

이제 사용자의 이름이 비어있는 경우를 처리했으며 모든 새로운 사용자에게 필요한 경우를 처리했습니다. 비록 아무도 도왔지만, 나는 때때로 stackoverflow에 대한 감사를 느낍니다. 때로는 문제를 해결하기 위해 질문을하는 것처럼 간단하기 때문입니다.

+0

좋은 발견, 나는 누군가가 너의 "벽에 말하는 것"기술보다 더 잘 이해할 수 있었을 것이라고 생각하지 않는다. 데이터베이스가 CHECK 제약 조건을 지원한다면, 이것을 위해 하나를 추가하고 가능한 많은 열을 추가 편집증에 대해 NOT NULL로 만듭니다. 깨진 코드는 쉽게 고칠 수 있고, 깨진 데이터는 그리 많지 않습니다. –