जब भी मैं एक वेब सर्वर बेंचमार्क करने के लिए 'ab' का उपयोग करता हूं, तो यह बहुत से अनुरोध भेजे जाने के बाद थोड़ी देर के लिए स्थिर हो जाएगा, केवल 20 सेकंड या उसके बाद जारी रखने के लिए।'ab' प्रोग्राम बहुत सारे अनुरोधों के बाद जमा हो जाता है, क्यों?
पर विचार करें निम्नलिखित HTTP सर्वर सिम्युलेटर, रूबी में लिखा:
require 'socket'
RESPONSE = "HTTP/1.1 200 OK\r\n" +
"Connection: close\r\n" +
"\r\n" +
"\r\n"
buffer = ""
server = TCPServer.new("127.0.0.1", 3000) # Create TCP server at port 3000.
server.listen(1024) # Set backlog to 1024.
while true
client = server.accept # Accept new client.
client.write(RESPONSE) # Write a stock "HTTP" response.
client.close_write # Shutdown write part of the socket.
client.read(nil, buffer) # Read all data from the socket.
client.close # Close it.
end
मैं तो अब चलाने के इस प्रकार है: के रूप में यह चाहिए था
ab -n 45000 -c 10 http://127.0.0.1:3000/
पहले कुछ सेकंड के दौरान, अब अपने काम करता है और 100% सीपीयू का उपयोग करता है:
Benchmarking 127.0.0.1 (be patient)
Completed 4500 requests
Completed 9000 requests
Completed 13500 requests
लगभग 13500 अनुरोधों के बाद, सिस्टम सीपीयू उपयोग टी ड्रॉप ओ 0% अब कुछ पर जमे हुए प्रतीत होता है। समस्या सर्वर में नहीं है क्योंकि इस समय, सर्वर स्वीकार() को कॉल कर रहा है। लगभग 20 सेकंड के बाद जारी रहता है जैसे कुछ भी नहीं हुआ, और फिर से 100% CPU का उपयोग करेगा, केवल कई सेकंड के बाद फिर से फ्रीज करने के लिए।
मुझे संदेह है कि कर्नेल में कुछ थ्रॉटलिंग कनेक्शन है, लेकिन क्या और क्यों? मैं ओएस एक्स तेंदुए का उपयोग कर रहा हूँ। मैंने लिनक्स पर भी इसी तरह के व्यवहार को देखा है, हालांकि फ्रीज अनुरोधों की एक बड़ी संख्या में होता है और ऐसा अक्सर नहीं होता है।
यह समस्या मुझे बड़े HTTP मानक चलाने से रोकती है।
हाँ, यही वह है। मैंने http://www.brianp.net/2008/10/03/changing-the-length-of-the-time_wait-state-on-mac-os-x/ पर निर्देशों का पालन करके एमएसएल को बदल दिया और सब कुछ काम करता है अभी व। धन्यवाद! – Hongli
बहुत बहुत धन्यवाद, यह वही समस्या तय कर रहा था जो मैं कर रहा था। –
यहां मैं सोच रहा था कि यह 'गोलांग' समस्या थी .. जब यह '16' से प्रत्येक 16000 अनुरोधों को जम गया – kouton