2012-11-30 13 views
5

टोमकैट और एपैच 2 एजेपी के माध्यम से जुड़े हुए हैं।टोमकैट वर्तमान धागा गिनती

<Connector port="8009" protocol="AJP/1.3" 
      URIEncoding="UTF-8" 
      redirectPort="8443" 
      connectionTimeout="20000" 
      maxThreads="512" /> 


<IfModule mpm_event_module> 
    StartServers   5 
    MinSpareThreads  25 
    MaxSpareThreads  75 
    ThreadLimit   64 
    ThreadsPerChild  25 
    ServerLimit  1024 
    MaxClients   512 
    MaxRequestsPerChild 0 
</IfModule> 

जब मैं बिल्ला प्रबंधक के पास जाओ, मैं देख रहा हूँ: मैं बिल्ला और अपाचे के लिए इन विन्यास है

"ajp-bio-8009" 
Max threads: 512 Current thread count: 256 Current thread busy: 231 

वर्तमान धागा व्यस्त कभी कभी 256 तक पहुँच जाता है क्यों वर्तमान धागा गिनती सेट नहीं है 512 तक?

उत्तर

2

वर्तमान धागा गतिशील रूप से अपाचे द्वारा प्रबंधित किया जाता है।

apache के स्रोत कोड में वर्किंग.c से: धागा आवश्यकतानुसार शुरू किया गया है। वर्कर थ्रेड शुरू करने के लिए मुख्य प्रवाह निम्नलिखित है।

static int worker_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s) 
    startup_children(remaining_children_to_start); //server/mpm/worker/worker.c 
    if (make_child(ap_server_conf, i) < 0) {  //server/mpm/worker/worker.c 
     child_main(slot);       //server/mpm/worker/worker.c 
     rv = apr_thread_create(&start_thread_id, thread_attr, start_threads 
     rv = apr_thread_create(&threads[i], thread_attr, worker_thread, my_info, pchild);  

और जब निष्क्रिय धागा> max_spare_threads, अपाचे मार बच्चे प्रक्रिया/धागा द्वारा अतिरिक्त धागा कम करने के लिए कम करने की कोशिश करेंगे निष्क्रिय धागे गिनती।

if (idle_thread_count > max_spare_threads) { 
    /* Kill off one child */ 
    ap_worker_pod_signal(pod, TRUE); 
    retained->idle_spawn_rate = 1; 
} 

आंतरिक रूप से अपाचे इन बच्चे प्रक्रिया का प्रबंधन, और संकेत का उपयोग कर बच्चे की प्रक्रिया के साथ संवाद करने की जरूरत धागे समायोजित करने के लिए। सभी धागे ap_scoreboard_image->servers[i][j];

अपाचे थ्रेड गिनती की निगरानी करेंगे, और जानकारी देने के लिए सॉकेट भेजकर कोलेक्टर को पता चलेगा। मोटे तौर पर कोड का पालन करते हुए (असंबंधित लाइन नष्ट कर दिया गया)

./httpd/modules/cluster/mod_heartbeat.c 
    for (i = 0; i < ctx->server_limit; i++) { 
     .... 
      for (j = 0; j < ctx->thread_limit; j++) { 
       ws = &ap_scoreboard_image->servers[i][j]; 
       if (res == SERVER_READY && ps->generation == mpm_generation) { 
        ready++; 
       } 
      } 
     } 

    len = apr_snprintf(buf, sizeof(buf), "v=%u&ready=%u&busy=%u", MSG_VERSION, ready, busy); 
    ... 
    rv = apr_socket_sendto(sock, ctx->mcast_addr, 0, buf, &len); 

बिलाव में: ./tomcat/java/org/apache/catalina/ha/backend/CollectedInfo: इन धागा जानकारी से प्राप्त कर रहे हैं। जावा और द्वारा प्रदर्शित: /Users/twer/lab/tomcat/java/org/apache/catalina/manager/StatusTransformer.java

writer.write(" currentThreadCount=\"" + mBeanServer.getAttribute(tpName, "currentThreadCount") + "\""); 

यहाँ कोड शो का सबसे मुख्य प्रवाह कर रहे हैं, असंबंधित लाइन नष्ट हो जाती हैं । अधिक जानने के लिए स्रोत डाउनलोड करें। डाउनलोड अपाचे स्रोत: http://www.apache.org/dist/httpd/?C=S;O=A डाउनलोड tomcat src: http://tomcat.apache.org/download-70.cgi

+0

उत्तर के लिए धन्यवाद, लेकिन यह मेरे प्रश्न का उत्तर नहीं देता है। मैं अपना सर्वर स्केल कर रहा हूं। मेरे पास अधिकतम धागे = 128 होते थे, और उनमें से अधिकांश व्यस्त थे। मैंने इसे अधिकतम धागे = 256 में बदल दिया। इस नंबर के साथ, मेरे पास 200 धागे व्यस्त थे। अब मुझे और हिट मिल रही हैं। मुझे लगता है कि 400 धागे व्यस्त होना चाहिए, इसलिए मैंने अधिकतम धागे की संख्या को 512 तक दोगुना कर दिया। लेकिन सर्वर केवल एक समय में अधिकतम 256 धागे की सेवा कर रहा है। तो मेरा सवाल है: मेरा सर्वर अधिक धागे का उपयोग करने के लिए मुझे क्या करना चाहिए? – mossaab

+0

कुछ वेब लोड टेस्ट टूल का उपयोग करने का प्रयास करें, सर्वर को अधिक अनुरोध प्राप्त करने दें, यह देखने के लिए कि क्या यह 512 तक हो सकता है। Http://stackoverflow.com/questions/5139953/web-server-load-testing-tool – whunmr

संबंधित मुद्दे