Jestem w trakcie ulepszania starej aplikacji Rails i PostgreSQL od 2.1 do Rails 3 (poprzez udany etap pośredni 2.3.11).Jednorożec! i PostgreSQL
W końcu, gdy wszystkie Rspecy działały sprawnie, zainstalowałem Mongrel 1.2.0.pre2 i uruchomiłem - wszystko w porządku. Nawet test JMeter z 100 równoczesnymi użytkownikami przeszedł OK.
Ale kiedy spróbowałem tego samego z Unicornem! serwer, działa dobrze, gdy sam go używam, ale kiedy dostaję go pod obciążeniem za pomocą JMetera, zaczyna dawać 100% błędów od momentu, w którym JMeter próbuje POST zalogować. W tym samym czasie, gdy sprawdzam jakąś konkretną stronę, daje mi dziwne błędy tak:
undefined method `eq' for nil:NilClass
na terminalu pojawia się następujący komunikat (ale tylko kilka razy):
message type 0x43 arrived from server while idle
message type 0x5a arrived from server while idle
WARNING: there is already a transaction in progress
EDIT: to wydaje się być problem ze wspólną PGconnect
obiektu, więc usunąłem niektóre z poprzedniego tekstu
stwierdziliśmy, że PostgreSQL docs określić, że PGconn
obiekt nie muszą być udostępniane między wątkami wysyłającymi współbieżne żądania.
To jednorożec! lub żądania mieszania AR z różnych wątków w tym samym obiekcie PGconn
?
database.yml:
production:
adapter: postgresql
encoding: unicode
database: ***
username: ***
password: ***
host: 127.0.0.1
Próbowałem nawet dodać to bezskutecznie:
allow_concurrency: true
unicorn.conf:
worker_processes 8
working_directory "/full/path/to/app"
listen '/tmp/app.sock', :backlog => 512
timeout 30
pid "/full/path/to/app/tmp/pids/puppetmaster_unicorn.pid"
preload_app true
if GC.respond_to?(:copy_on_write_friendly=)
GC.copy_on_write_friendly = true
end
Specyfikacja:
- Rails 3.0.6 (z powodu wdrożenia env)
- Jednorożec! 4.1.1
- Nginx 1.0.5
- pg gem 0.11.0
- PostgreSQL 9.0.4
- Mac OS X 10.7.2
Jeśli Rails wersja powinna być winowajcą, oczywiście Mogę uaktualnić do najnowszego. Właśnie zacząłem od tego, co ma usługodawca.
Ile jednorożec pracownicy mają utworzyć w unicorn.rb? Jaki limit czasu? – stephenmurdoch
Zaktualizowałem moje pytanie z unicorn.conf – Laas