Webrick प्रतिक्रिया करने के लिए बहुत धीमी है। इसे कैसे गति दें?


88

मेरे पास एक रेल एप्लिकेशन है जो मैं अपने सर्वर पर चला रहा हूं। जब मैं एक दूरस्थ डेस्कटॉप पर जाता हूं और एप्लिकेशन लोड करने का प्रयास करता हूं, तो सर्वर को एक साधारण एचटीएमएल पेज के साथ प्रतिक्रिया देने में 3-4 मिनट का समय लगता है। हालाँकि, जब मैं सर्वर पर स्थानीय रूप से पृष्ठ को लोड करता हूं, तो पृष्ठ केवल एक सेकंड में दिखाई देता है। मैंने अपने दूरस्थ डेस्कटॉप से ​​सर्वर को पिंग करने की कोशिश की और पिंग उचित समय में सफल हो रहे हैं।

यह सब मुझे Oracle के मूल ग्राहक और SQLPLUS स्थापित करने के बाद शुरू हुआ लगता है। क्या मुझे ओरेकल पर संदेह करना चाहिए? क्या किसी ने इसके समान कुछ अनुभव किया है?


2
हो सकता है कि अब इसे सर्वरफॉल्ट पर ले जाया जाए?
प्रो। फालकेन

कोई जरूरत नहीं है, यह केवल एक विन्यास फाइल में एक लाइन को संशोधित करके हल किया जा सकता है
मोस्ट मोस्टैचो

2
@AmigableClarkKant Webrick का डेवलपर टूल अधिक है, इसलिए SO पर बने रहना बेहतर लगता है।
डेविड

अच्छाई, और सब के साथ मैं vmware के लिए समस्या को जिम्मेदार ठहराया, नरक में जलने के
निशान

जवाबों:


139

यहाँ एक ही मुद्दा रहा (एक साल बाद भी)। लिनक्स के तहत आपको निम्नलिखित कार्य करने होंगे:

फ़ाइल के लिए देखें /usr/lib/ruby/1.9.1/webrick/config.rb और इसे संपादित करें।

लाइन बदलें

:DoNotReverseLookup => nil,

साथ में

:DoNotReverseLookup => true,

वेब्रिक को पुनः प्रारंभ करें और यह एक आकर्षण की तरह काम करेगा :)


21
काम किया! हमारे स्थानीय नेटवर्क में किसी अन्य कंप्यूटर से स्थैतिक सामग्री की सेवा करते समय मुझे वेब्रिक के धीमे होने की समस्या थी। इससे यह हल हो गया। फर्क सिर्फ इतना था कि config.rb में था: ~ / .rvm / rubies / ruby-1.9.2-p180 / lib / ruby ​​/ 1.9.1 / webrick / config.rb - क्योंकि हम आरवीएम का उपयोग कर रहे हैं।
स्लोबोदान कोवासेविक

btw, मेरे पास वह चाबी नहीं थी, इसलिए मैंने अभी इसे जोड़ा और इसने काम किया
इकोलॉजिक

आपने इसे कहाँ जोड़ा? क्या अनुभाग?
अबे पेट्रिलो

यह रूबी- doc.org/stdlib/libdoc/webrick/rdoc/classes/WEBrick/… के अनुसार सामान्य खंड में होना चाहिए ।
डेविड ग्रेसन

10
माणिक का संस्करण मेरे पास रूबी-1.8.7-p330 है और इसमें DoNotReverseLookup विकल्प नहीं है। स्ट्रिंग "DoNotReverseLookup" वेब्रिक के config.rb या कहीं भी ~ / .rvm / माणिक / रूबी-1.8.7-p330 / lib / रूबी / 1.8 में दिखाई नहीं देता है। क्या रूबी-1.8.7-p330 में इस समस्या को ठीक करने का कोई अच्छा तरीका है?
डेविड ग्रेसन

36

एक ही समस्या थी। मेरे लिए, इस पोस्ट ने समाधान रखा। यदि आप उबंटू पर हैं, तो रोकें (या स्थापना रद्द करें) avahi-daemonservice avahi-daemon stopडेमॉन रोकता है।

वेब्रिक अब बहुत तेजी से महसूस करता है ।

रेल्स लाइटहाउस में समस्या की एक पुरानी रिपोर्ट है , हालांकि, रूबी-ऑन-रेल्स ने तब से अपने टिकटों को जीथब करने के लिए स्थानांतरित कर दिया है ; दुर्भाग्य की बात है कि यह पुरानी समस्या अभी भी बनी हुई है।

हालांकि जागरूक रहें, कि यदि आप वास्तव में किसी avahi-daemon चीज के लिए उपयोग करते हैं, जैसे आपके नेटवर्क पर प्रिंटर और स्कैनर ढूंढना , तो वह काम नहीं करेगा।


1
बहुत बहुत धन्यवाद!! इसने मेरी समस्या को Ubuntu 11.04 / 11.10 / 12.04
SMMousavi

1
वैसे यह जवाब मेरे लिए नायाब हीरो लगता है!
पीसीओडर

1
यह मेरे लिए भी किया था। Ubuntu 13.04 पर एक OLD (1.8.7) ऐप
चलाना

1
यह समाधान वास्तव में मुझे परेशानी में डाल देता है क्योंकि इससे नेटवर्क सेवाएं पागल हो जाती हैं! निम्नलिखित url फ़ोरम की
t

23

बस एक ही समस्या थी।

...
:DoNotReverseLookup => true,
...

मेरे लिए भी चाल चली। बस अगर आप rvm के नीचे रूबी चलाते हैं, तो यहां जाने के लिए रास्ता है:

~/.rvm/rubies/ruby-<version>/lib/ruby/<version>/webrick/config.rb

1
धन्यवाद! इससे पहले कि मैं आपका जवाब पा पाता, मैंने खोज की। आरवीएम की खोज की और वेब्रिक नहीं पाया और / usr / lib को बदल दिया और इससे कोई मदद नहीं मिली। यह काम किया।
बी सेवन

@KenBarber बहुत अच्छा यकीन है कि यह एक अच्छी दिशा नहीं है, लेकिन एक अच्छा और छोटा विकास-चक्र होने के लिए अपने स्थानीय आरवीएम इंस्टॉलेशन के लिए इस संशोधन को करना ठीक है। और वैसे, यह सिर्फ आपकी उपयोगकर्ता प्रोफ़ाइल है, आप किसी और को परेशान नहीं करेंगे ...
केजेल्स्की

1
@Kjellski शायद आप सही हैं, लेकिन यह उन्नयन के माध्यम से कायम नहीं है, और न ही यह एक समाधान है जो आप आसानी से अपने साथी भाइयों के पास जा सकते हैं। शायद इस मामले में ऑन रेल्स एक बंदर पैच बेहतर है कंधे उचकाने की क्रिया । वैसे भी अब इसकी नियत: github.com/rails/rails/commit/… ...
Ken Barber

15

"पतला" अब स्थानीय रूप से दोनों को चलाने के लिए एक बढ़िया विकल्प है और हरोकू पर:

हरोकू पर: https://devcenter.heroku.com/articles/rails3#webserver

वेबसाइट: http://code.macournoyer.com/thin/

आप इसे अपने Gemfile में लगाकर स्थानीय रूप से उपयोग कर सकते हैं:

gem "thin"

... और फिर बंडल चलाने के लिए और के साथ अपने सर्वर प्रारंभ thin startया rails s

हरोकू पर अपडेट करें

थिन अब हेरोकू के लिए एक बुरा विकल्प माना जाता है । अधिक जानकारी यहाँ:

https://blog.heroku.com/archives/2013/4/3/routing_and_web_performance_on_heroku_a_faq

उनकी सिफारिश:

JRuby पर यूनिकॉर्न या प्यूमा जैसे एक समवर्ती वेब बैकएंड पर स्विच करें, जो डायनो को अपने स्वयं के अनुरोध कतार का प्रबंधन करने और लंबे अनुरोधों पर अवरुद्ध होने से रोकता है।


कोड या सिस्टम में कुछ भी नहीं बदलने से एक सही समाधान।
फर्नांडो कोश

यदि यह स्थापित है तो सिनात्रा स्वचालित रूप से वेब्रिक के बजाय पतले का उपयोग करता है। मुझे बस इतना ही करना था gem install thinSinatrarb.com/intro.html देखें यह भी स्थापित करने के लिए मणि को पतला चलाने की सिफारिश की जाती है, जो उपलब्ध होने पर सिनात्रा उठाएगा संपादित करें: कठोर प्रदर्शन में सुधार। 1.3s से 0.05s तक।
गुइसीम

6

मुझे एक समान रूप से ऐसी ही समस्या थी जो वीपीएन के माध्यम से WEBrick सर्वर तक पहुँचने पर स्वयं प्रकट होती थी। अनुरोधों में एक लंबा समय लगेगा, इसमें से अधिकांश तार पर कुछ भी नहीं हो रहा है। चूंकि न तो mongrelऔर न ही thinरत्नों ने विंडोज पर Ruby1.9 के साथ काम किया था और कोई रास्ता नहीं था जिससे मैं खुद को स्रोत से सामान संकलित करने में जुट गया था, मुझे WEBrick के साथ रहने की जरूरत थी।

ठीक config पैरामीटर सेट करने के लिए था DoNotReverseLookupकरने के लिए true, जब WEBrick सर्वर बनाने:

server = HTTPServer.new {:DoNotReverseLookup => true, ...}


2

1.8.7 पर वेब्रिक के साथ ऐसा करने की कोशिश कर रहा था और इसे बदलने के लिए विन्यास नहीं मिला। हालाँकि, एक धोखा जो आप उपयोग कर सकते हैं वह सर्वर के होस्ट फ़ाइल में जोड़ने के लिए है जो आईपी पते को चालू करने के लिए इसे उल्टा करने की कोशिश कर रहा है।


महान। यह तब बेहतर है जब कुछ अद्यतन के बाद परिवर्तन की जरूरत है जो कुछ webrick फ़ाइल को संपादित करना।
पेट्र

मेरे मामले में प्रविष्टि को जोड़ा जाएगा (लिनक्स गेस्ट के लिए
वेब्रिक

2

मैंने सिनात्रा के साथ 10 सेकंड की देरी का अनुभव किया। इस स्निपेट ने इसे मेरे लिए हल कर दिया।

इसे अपनी app.rbफ़ाइल के शीर्ष के पास जोड़ें

class Rack::Handler::WEBrick
    class << self
        alias_method :run_original, :run
    end
    def self.run(app, options={})
        options[:DoNotReverseLookup] = true
        run_original(app, options)
    end
end

स्रोत देखें


1

यह एक पुराना प्रश्न और उत्तर धागा है जिसने मुझे :DoNotReverseLookupस्थानीय विकास वर्चुअल मशीन पर समस्या को हल करने में मदद की और अतिरिक्त जानकारी जोड़ना चाहता था। यह वेब पेज रूबी कोर में प्रतिगमन त्रुटि की व्याख्या करता है जो इस मुद्दे को कुछ के लिए प्रदर्शित करता है; जोर मेरा है; इन सब में से कुछ समय के लिए रूबी कोर को ठीक करने के लिए एक GitHub पुल अनुरोध है और उम्मीद है कि यह स्वीकृत हो जाएगा और रूबी के जल्द ही-इश रिलीज में विलय हो जाएगा:

समस्या निवारण के कुछ घंटों के बाद, यह पता चला कि यह था! जाहिर है, 1.8.6 से 2.0.0 तक रूबी के मानक परिवाद के विकास के साथ, WEBrick ने एक नया कॉन्फ़िगरेशन विकल्प प्राप्त किया :DoNotReverseLookupजो nilडिफ़ॉल्ट रूप से सेट है । फिर, WEBrick के अनुरोध प्रसंस्करण कोड की गहराई में, यह do_not_reverse_lookupआने वाले कनेक्शन सॉकेट उदाहरण पर ध्वज को मान के लिए सेट करता है config[:DoNotReverseLookup]चूँकि यह मान है nil, जो मिथ्या है, इसका प्रभाव falseवैश्विक Socket.do_not_reverse_lookupझंडे को उखाड़ फेंकने के समान है । इसलिए, जब तक आपके पास: DoNotReverseLookup => trueआपके WEBrick config में, रिवर्स DNS लुकअप हमेशा प्रत्येक नए कनेक्शन के लिए होगा, संभवतः गंभीर विलंबता का कारण होगा।

इस खोज से संबंधित एक लेखक से एक GitHub पुल अनुरोध है जो रूबी WEBrick स्रोत कोड में समस्या को सुधारने का प्रस्ताव देता है: WEBrick में रिग्रेशन बग को ठीक करें: DoNotReverseLookup config विकल्प कार्यान्वयन # 731

अनुरोध के रूप में उल्लिखित समाधान lib/webrick/server.rbइस से लाइन 181 को बदलना है :

sock.do_not_reverse_lookup = config[:DoNotReverseLookup]

इसके लिए:

unless config[:DoNotReverseLookup].nil?

यहाँ साझा करना अगर किसी को भी इस बहुचर्चित प्रश्न / उत्तर धागे पर ठोकर लगे और रूबी कोर में इस मुद्दे को हल करने में प्रगति में रुचि रखते हैं। उम्मीद है कि इस खींचतान का विलय हो जाएगा या अंतर्निहित मुद्दे को रूबी की अगली रिलीज में किसी तरह निपटा दिया जाएगा; शायद 2.1.6?


0

यह बहुत देर से जवाब है, लेकिन मैंने दिन का एक अच्छा हिस्सा इस मुद्दे पर बहस कर रहा था, जो वैग्रेंट पर चलने वाली रेल के साथ था। रिवर्स DNS लुकअप को बदलना वास्तव में अनुरोध समय को बिल्कुल नहीं सुधारता है। दो चीजों के संयोजन ने मेरे पेज को विकास मोड में ~ 20 सेकंड से ~ 3 सेकंड तक ले लिया:

WEBrick को मोंगरेल से बदलें। मुझे पूर्व-संस्करण का उपयोग करना था या यह स्थापित नहीं होगा:

sudo gem install mongrel --pre

फिर देव के लिए मेरे रत्न में जोड़ें:

group :test, :development do
  gem 'mongrel'
end

मेरे सर्वर को इस तरह शुरू किया:

rails server mongrel -e development

यह 5 सेकंड या 6 सेकंड में कट गया, लेकिन यह अभी भी बहुत धीमा था। यह केक पर आइसिंग था - इसे जेफाइल में जोड़ें:

group :development do
  gem 'rails-dev-boost', :git => 'git://github.com/thedarkone/rails-dev-boost.git'
end


0

शायद मेरी दुर्लभ स्थिति में, मैंने अपने iptables को फ्लश करने के बाद काम किया, इसका कोई साइड इफेक्ट नहीं था क्योंकि मेरे पास कोई कस्टम नियम नहीं थे (बस डिफ़ॉल्ट Ubuntu सभी की अनुमति है):

sudo iptables -F
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.