ما الذي يسبب خيوط معلقة غامضة في colfusion -> اتصال mysql

StackOverflow https://stackoverflow.com/questions/3622845

  •  26-09-2019
  •  | 
  •  

سؤال

واحدة من "الميزات" الأكثر إثارة للاهتمام في Coldfusion هي كيفية معالجة الطلبات الخارجية. جوهره الأساسي هو أنه عندما يتم إجراء استعلام لمصدر خارجي من خلال <cfquery> أو أو أي طلب خارجي آخر مثل أنه يمرر الطلب الخارجي إلى برنامج تشغيل معين ، وفي هذه المرحلة ، لا يستطيع CF نفسه تعليقه. حتى إذا تم تحديد مهلة على الاستعلام أو في CFSETTING ، يتم تجاهلها بشكل قاطع لجميع الطلبات الخارجية.

http://www.coldfusionmuse.com/index.cfm/2009/6/9/killing.threads

لذلك مع وضع ذلك في الاعتبار ، فإن المشكلة التي نواجهها هي أن التواصل بين خادم CF وخادم MySQL الخاص بنا بطريقة أو بأخرى يتركون في بعض الأحيان ويترك خلف الخيوط المعلقة. لديهم الخصائص التالية.

  1. يظهر خيط Hung في CF ولا يمكن قتله من FusionReactor.
  2. هنالك لا Hung Thread مرئية في MySQL ، وليس الاستعلام النشط الجري (فقط النوم المعتاد).
  3. تستجيب قاعدة البيانات للمكالمات الأخرى ويبدو أنها تعمل بشكل صحيح.
  4. لم يتم الوصول إلى اتصالات الحد الأقصى للـ DB ولا المستخدم.

يبدو لي أن المرشح الوحيد المحتمل هو أن CF بطريقة أو بأخرى تقدم طلبًا ، فإن MySQL يستجيب لهذا الطلب ولكن مع إجابة تتجاهلها CF وتستمر في الحفاظ على الخيط مفتوحًا للانتظار للرد من MySQL. هذا من شأنه أن يفسر لماذا يبدو أن قاعدة البيانات لا تظهر أي علامات على المشكلات ، ولكن CF يبقي مؤشر ترابط مفتوح في انتظار الإجابة الغامضة.

مستخدم تظهر خيوط Hung هذه بشكل عشوائي على البرامج النصية التي تعمل بطريقة أخرى (مثل نشر تعليق على مقال إخباري). على الرغم من أن موضوع واحد معلق لهذا البرنامج النصي ، فإن طلبات أخرى لهذا البرنامج النصي ستستمر ، مما يعني أن البرنامج النصي ليس على خطأ ، بل الحالة التي يواجهها عند تنفيذ البرنامج النصي.

أجرينا بعض الاختبارات لتحديد أنه لم يكن خطأ Max_Connections الذي تم إنشاؤه بواسطة MySQL ... لقد أنشأنا مستخدمًا ، وقمنا بإنشاء اتصال واحد كحد أقصى ، وربطنا هذا الاتصال باستعلام نوم (1000) وقمنا بتنفيذ استعلام آخر. لسوء الحظ ، فإنه يخطئ بشكل صحيح دون إنشاء موضوع معلق.

لذلك ، لقد تركت في هذه المرحلة مع عدم وجود أدنى فكرة عن الخطأ. هل هناك حد اتصال أو مهلة أخرى يمكن أن تسبب التواصل بين الخوادم للانحناء؟

هل كانت مفيدة؟

المحلول 3

قصة قصيرة طويلة ، لكنني أعتقد أن سببها كان بسبب معالجة صور Coldfusion CF8. لقد كان مجرد عربات التي تجرها الدواب والآن في CF9 لم أر هذه المشكلة مرة أخرى.

نصائح أخرى

أحد الأشياء التي يجب أن تبدأ في النظر إليها هو الأجهزة بين الخادمين. من الممكن أن يكون لديك جهاز توجيه أو جسر أو NIC يسقط حزمًا عرضية. يمكن أن يؤدي ذلك إلى تفكير مربع MySQL في أنه قد أكمل المهمة بينما يجلس خادم CF هناك وينتظر استجابة كاملة إلى أجل غير مسمى ، مما يؤدي إلى إنشاء مؤشر ترابط معلق.

3com لديها بعض التفاصيل حول اختبار لفقدان الحزم هنا: http://support.3com.com/infodeli/tools/netmgt/tncsunix/product/091500/c11ploss.htm#22128

كان لدينا مشكلة مماثلة مع خادم MS SQL. هناك ، كان السبب الجذري مشكلة معروفة حيث يعتقد الخادم ، لسبب ما ، أنه يتم إيقاف تشغيله ، ويتعلق مؤشر الترابط (على الرغم من أن الخادم ، من الواضح أنه لا يغلق).

لم نتمكن من القضاء على المشكلة ، لكننا تمكنا من تقليلها عن طريق إيقاف تشغيل اتصالات DB المجمعة والتعبئة مع معدل تحديث الاتصال. (أعتقد أنني حصلت على هذه التسمية بشكل صحيح - لا يمكن الوصول إلى المسؤول في عملي الجديد.) كلاهما في خصائص الاتصال في المسؤول.

مجرد ملاحظة: المشكلة ليست بالكامل مع CF. المشكلة ، على ما يبدو ، تؤثر على جميع تطبيقات Java. وهذا لا ، بأي حال من الأحوال ، يقلل من مدى إزعاجي من هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top