2011-06-06 44 views
2

我有最新的Nginx運行Passenger,SQLite和Rails 3.1。不知何故,當我有Passenger跑了一段時間,當我訪問我的網站時,我開始出現「502壞門戶」錯誤。nginx +乘客+鐵路3.1 = 502壞門戶?

這裏是我的Nginx的錯誤日誌中的一個片段:

2011/06/27 08:55:33 [error] 20331#0: *11270 upstream prematurely closed connection while reading response header from upstream, client: xxx.xxx.xx.x, server: www.example.com, request: "GET/HTTP/1.1", upstream: "passenger:unix:/passenger_helper_server:", host: "example.com" 
2011/06/27 08:55:47 [info] 20331#0: *11273 client closed prematurely connection, so upstream connection is closed too while sending request to upstream, client: xxx.xxx.xx.x, server: www.example.com, request: "GET/HTTP/1.1", upstream: "passenger:unix:/passenger_helper_server:", host: "example.com" 

這裏是我的passenger-status --show=backtraces輸出:

Thread 'Client thread 7': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 10': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 11': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 12': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 13': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 14': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 15': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 16': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 17': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 18': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 19': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 20': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 21': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 22': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 23': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'Client thread 24': 
in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160) 
in 'void Client::threadMain()' (HelperAgent.cpp:603) 

Thread 'MessageServer thread': 
in 'void Passenger::MessageServer::mainLoop()' (MessageServer.h:537) 

Thread 'MessageServer client thread 35': 
in 'virtual bool Passenger::BacktracesServer::processMessage(Passenger::MessageServer::CommonClientContext&, boost::shared_ptr<Passenger::MessageServer::ClientContext>&, const std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)' (BacktracesServer.h:47) 
in 'void Passenger::MessageServer::clientHandlingMainLoop(Passenger::FileDescriptor&)' (MessageServer.h:470) 

這是我的passenger-memory-stats顯示:

---------- Nginx processes ---------- 
PID PPID VMSize Private Name 
------------------------------------- 
16291 1  35.4 MB 0.1 MB nginx: master process /home/apps/.nginx/sbin/nginx 
16292 16291 36.0 MB 0.8 MB nginx: worker process 
16293 16291 35.8 MB 0.5 MB nginx: worker process 
16294 16291 35.8 MB 0.5 MB nginx: worker process 
16295 16291 35.8 MB 0.5 MB nginx: worker process 
### Processes: 5 
### Total private dirty RSS: 2.46 MB 


----- Passenger processes ------ 
PID VMSize Private Name 
-------------------------------- 
16251 87.0 MB 0.3 MB PassengerWatchdog 
16254 100.4 MB 1.3 MB PassengerHelperAgent 
16256 41.6 MB 5.7 MB Passenger spawn server 
16259 134.8 MB 0.8 MB PassengerLoggingAgent 
18390 770.4 MB 17.1 MB Passenger ApplicationSpawner: /home/apps/manager/current 
18415 853.3 MB 147.7 MB Rack: /home/apps/manager/current 
18424 790.5 MB 57.2 MB Rack: /home/apps/manager/current 
18431 774.7 MB 18.7 MB Rack: /home/apps/manager/current 
### Processes: 8 
### Total private dirty RSS: 248.85 MB 

似乎我的Passenger和Nginx之間的通信有問題嗎?

另外,看着Rails日誌,很明顯,請求永遠不會到達Rails,因爲沒有獲取502錯誤的訪問的日誌條目。所以我最初認爲任何Rack中間件出了問題都是不應該的。

+0

如果它沒有可能與內存管理有關,我會投票轉移到http:// servefault。com或只是標記爲「太具體」 – conny 2011-06-08 14:17:19

回答

2

The "V" in VM is for Virtual。另請參閱其他SO問題的答案,例如Virtual Memory Usage from Java under Linux, too much memory used

頂部147 MB​​並不暗示任何不尋常的東西。從乘客的角度來看,您的502錯誤意味着其他工作流程出了問題。你應該檢查你的Rails & Nginx日誌文件的線索,也許passenger-status --show=backtraces

+0

嗨@康尼,對於遲到的回覆抱歉,我一直非常忙碌。我已根據您的建議更新了我的問題。 nginx錯誤日誌肯定會顯示nginx和乘客之間可疑的東西。你對此有更多的反饋嗎?如果需要,我可以將其標記爲移到serverfault.com。謝謝。 – JeanMertz 2011-06-27 09:12:43

+1

嗨 - 這是否解決?我現在有這個問題:s – bodacious 2011-06-29 18:07:29

+0

@bodacious我從來沒有解決這個問題。我正考慮從乾淨的Ubuntu映像中完全創建服務器,但是我跳上了Heroku的潮流,當我幾乎沒有足夠的時間開發我的應用併爲我的客戶提供支持時,我真的不想處理這些問題。 – JeanMertz 2011-07-23 18:57:09

1

嘗試設置passenger_spawn_method conservative - 顯然有與客運默認設置分叉和Rails 3.1

1

我正好滿足了這種致命nginx報告的「502 Bad Gateway error」,web stack是Ubuntu 12.04 + Rails 3.2.9 + Passenger 3.0.18 + nginx 1.2.4,花了我2​​個小時找到根本原因:

我的rails應用程序不需要數據庫支持,所以我只是刪除了Gemfile中的gem 'sqlite3',它在開發模式下工作正常,但會導致502 Bad Gateway處於生產模式。

所以後加入Gemfile中,這樣的502錯誤網關錯誤消失回來gem 'sqlite3' ....

+0

這就是它爲了我。 – 2014-05-05 06:48:59

0

這對我來說同樣在導軌4,但我已經在/ confirg /祕密加入了「SECRETKEYBASE」。 yml

production: 
secretkeybase: # add yours here 
+0

嗨 - 你能分享一下secret_key_base與這個問題有關嗎?我們突然得到了502個壞的網關,它也似乎與我們所做的更改有關 - 我們更新了secretts.yml中的secret_key_base,而不是更早的Rails約定config/secret_token.rb。但我們無法弄清楚爲什麼這會產生影響,或者如何解決這個問題...... – Jacob 2016-03-24 22:04:46