2013-06-04 12 views
5

Próbowałem użyć 2X pracownik hamowni, czekają na nie pojawiają się błędy R14, ale jest to wynik:Heroku hamownia pracownik dając R14 błędy - problemy z zarządzaniem pamięcią - opcje limit pamięci rmagick

2013-06-04T13:03:30.723260+00:00 heroku[worker.1]: Process running mem=1047M(102.3%) 
2013-06-04T13:03:30.723260+00:00 heroku[worker.1]: Error R14 (Memory quota exceeded) 

Jednak zadanie dla pracownika zakończyło się pomyślnie.

Pytania:

  • Jak mogę zmniejszyć potrzebną pamięć o mojej pracy? - Używam klejnotów rmagick do konwertowania listy obrazów do jednego wielostronicowego pliku pdf.
  • Jak niebezpieczne jest zachowanie takiego procesu (z błędami R14), ponieważ ostatnie zadanie kończy się pomyślnie?

góry dzięki

+0

Czy używasz tylko jednego z tych zadań jednocześnie w sidekiq? To znaczy, czy 1 praca zajmuje 1 gig pamięci? –

+0

Wygląda na to, że klejnot rmagick, którego używam, ma również wycieki pamięci: http://stackoverflow.com/questions/958681/how-to-deal-with-memory-leaks-in-rmagick-in-ruby – josal

Odpowiedz

5

końcu znalazłem rozwiązanie. Problem polegał na rmagick. Dostaje całą dostępną pamięć. Nie ma znaczenia, czy używasz dyka pracującego 2X zamiast 1X. Rośnie do maksymalnych dostępnych zasobów. Więc, we have to set a limit. Ale w moim przypadku nie wszystkie ograniczenia działały.

Można nawiązać połączenie systemu bezpośrednio w ten sposób:

convert -limit memory 0 -limit map 0 list_of_input_files output_file

W ten sposób można uniknąć korzystania z pamięci podręcznej, przechodząc bezpośrednio do pamięci podręcznej dysku. To jedyny sposób, w jaki udało mi się uniknąć błędów R14 w heroku. W innych kombinacjach, takich jak -limit memory 32 -limit map 64 lub podobnych, zawsze dawało mi to błędy. Podjąłem pomysł from here.

Oczywiście, zawsze można użyć rmagick library Dzięki tej linii, ale to nie działa dla mnie i zrobiłem stosowanie metody syscall wyjaśniono wcześniej:

Magick.limit_resource(:memory, 0) 
Magick.limit_resource(:map, 0) 

UPDATE: Użyłem nice polecenie, aby zapewnić wyższy priorytet. Wygląda na to, że poprawia się, ale w końcu dostaję błędy R14, ale to prawda, że ​​nie są tak często (nawet z tym samym plikiem!).

+0

powinieneś spróbować [minimagick] (https://github.com/minimagick/minimagick) – shinnyx

+0

Próbowałem, ale nie pamiętam, dlaczego go nie wybrałem. Dzięki i tak. – josal

+0

Świetne znalezisko @josai – Trip

0

Trochę spóźniony na imprezę, ale w moim przypadku śmieciarz był moim zbawcą. Po każdym zadaniu wystarczy uruchomić GC.start.

+0

Dzięki za odpowiedź. – josal

Powiązane problemy