لماذا لا يتم استخدام تجمع خيوط Tomcat 6 Executor من قبل الموصل؟
-
02-10-2019 - |
سؤال
يبدو أن server.xml ما يلي:
<!--The connectors can use a shared executor, you can define one or more named thread pools-->
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="200"
minSpareThreads="4"/>
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="10000"
maxKeepAliveRequests="1"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
ومع ذلك ، في مدير Tomcat (http: // localhost/manager/status) يظهر لاتباعه
http-8080: Max threads: -1 Current thread count: -1 Current thread busy: -1
jk-8009: Max threads: 200 Current thread count: 4 Current thread busy: 1
لسبب ما ، يبدو أن HTTP-8080 لا يستخدم المنفذ على الرغم من أنه موجه أيضًا ويستخدم JK-8009 المنفذ على الرغم من أنه لم يتم توجيهه إليه. هل المدير يسيء فقط أو لم أقم بإعداد تجمع الخيوط بشكل صحيح؟
المحلول
أظن أن المدير يقوم بالإبلاغ عن القيم التي تم تعيينها كجزء من تحديد الموصل ، وعدم الإبلاغ عن القيم من المنفذ. يعمل المنفذ ويل كما هو متوقع ، ولم يتم الإبلاغ عنه بشكل صحيح في المدير.
القيمة 200 لموصل AJP مضللة هنا ، لأن 200 هي القيمة الافتراضية ل maxThreads
(كما هو محدد هنا) ؛ لأنك لم تحدد maxThreads
بالنسبة لموصل AJP ، هذه هي القيمة المستخدمة.
يقوم موصل HTTP بالإبلاغ عن قيم هراء لأنه يقوم بتفويض إدارة مؤشرات الترابط إلى المنفذ.
للتحقق مما إذا كان هذا صحيحًا ، حاول تغيير maxThreads
قيمة المنفذ لقيمة مختلفة. يجب أن ترى maxThreads
من موصل AJP يقيم في 200 (لأن هذه هي قيمتها الافتراضية).
نصائح أخرى
الحد الأقصى لعدد مؤشرات ترابط معالجة الطلبات المراد إنشاؤه بواسطة هذا الموصل ، والذي يحدد بالتالي الحد الأقصى لعدد الطلبات المتزامنة التي يمكن معالجتها. إذا لم يتم تحديدها ، يتم تعيين هذه السمة على 200. إذا كان المنفذ مرتبطًا بهذا الموصل ، فسيتم تجاهل هذه السمة لأن الموصل سيقوم بتنفيذ المهام باستخدام Executor بدلاً من تجمع مؤشرات ترابط داخلي. لاحظ أنه إذا تم تكوين المنفذ ، فسيتم تسجيل أي قيمة لهذه السمة بشكل صحيح ولكن سيتم الإبلاغ عنها (على سبيل المثال عبر JMX) على أنها -1 لتوضيح أنه لم يتم استخدامه.