نمایش نتایج 1 تا 5 از 5

نام تاپیک: وقتی چند پروسه از این برنامه با هم اجرا می‌شوند، برنامه هنگ میکند؟ چرا؟

  1. #1
    کاربر دائمی آواتار Esikhoob
    تاریخ عضویت
    شهریور 1385
    محل زندگی
    Tehran
    پست
    277

    وقتی چند پروسه از این برنامه با هم اجرا می‌شوند، برنامه هنگ میکند؟ چرا؟

    سلام دوستان
    من یک برنامه Windows دارم که بخشی از آن به زبان C#‎‎‎‎‎‎‎‎ MS .NET Framework نوشتم ولی هسته اصلی آن که کار را انجام میدهد توسط شخص دیگری به زبان Win32 نوشته شده است.
    مشکلی که در اجرای آن می‌بینم مربوط به سرعت آن میشود. به خاطر نیاز ما لازم است چند تا از این برنامه در سیستم عامل مان در کنار هم اجرا شوند. البته من هر کدام را با یک حساب کاربر Windows Account اختصاصی اجرا کرده ام (با TaskScheduler می‌توان این کار را کرد).
    وقتی درخواستی به یکی از آن برنامه محول میشود، در کامپیوتر خودم (Win10) که برای برنامه نویسی است، فوری CPU به 100% میرود و کار شروع میشود ولی در کامپیوتر سرور که مشکل ما در آن اتفاق می‌افتد، در مواقعی اول Disk Activity به 100% میرسد بعد از چند دقیقه به حالت نرمال برمیگردد و بعدCPU به 100% میرود و کار اصلی از آن موقع شروع می‌شود. این مشکل همیشه اتفاق نمی‌افتد و همین کار اشکال یابی را مشکل میکند.
    من در لحظه کار نکردن برنامه در Resource Monitor دیدم مثل اینکه چند پروسه از این برنامه من که اسمش را SDLAutomation.Console.exe گذاشته ام سر PageFile با هم رقابت میکنند، چون از عکسی که گرفتم این را نشان می‌‌دهد:
    pagefile_hang.png

    سیستم عامل سرور ما WindowsServer 2012 است. من حدس می‌زنم دوستانی که به زبان ++C آشنا هستند شاید بتوانند با تنظیم سیستم عامل کاری کنند که حافظه ها یا همان Pagefile ها تداخل نکنند. مثلا در صفحه
    System Properties--> Advanced --> Performance Options ---> Data Execution Prevention
    به این تنظیم مشکوک هستم. بخصوص که پیش فرض این تنظیم در Windows Server با Windows 10 فرق میکند و در اولی برای همه برنامه‌ها فعال است.
    ----
    با برنامه مخصوص debug به نام DebugDiag که وضعیت برنامه را در لحظه خطا نشان میدهد گزارشی تهیه کردم ، که قسمت warningی دارد که میگوید:

    Warning
    Number of objects ready for finalization: 476

    Description Recommendation
    This is an indication that your finalizer thread may be blocked. Look at finalizequeue info and finalizer stack to determine why/if the finalizer is blocked
    آخرین ویرایش به وسیله Esikhoob : چهارشنبه 29 آبان 1398 در 11:48 صبح دلیل: اضافه کردن اطلاعات جدید

  2. #2

    نقل قول: وقتی چند پروسه از این برنامه با هم اجرا می‌شوند، برنامه هنگ میکند؟ چرا؟

    سلام
    مصرف بالای
    Pagefile یعنی یکی از موارد زیر:
    1- برنامه تون رم بیشتری برا کار کردن نیاز داره .در این مواقع تنها راه حل تهیه رم بیشتر هستش.تنظیمات رو این مورد تاثیر مثبت ندارن.چیزی رو تغییر ندید.
    2- برنامه تون مشکل مدیریت منابع(حافظه) داره که من حدس میزنم مشکل همین هستش. تو زبان های مدیریت شده مثل سی شارپ هم احتمال نشت حافظه یا منابع دیگر هستش. کنترل منابع آسون تر هستش ولی بلاخره نیازه.
    در مورد مصرف بالای cpu :
    ممکنه در کدتو
    ن spin-wait دارید یعنی یک حلقه بی نهایت دارید در جایی از برنامه .
    اگر برنامه چند نخی هستش باید از توابع synchronization استفاده کنید تا مصرف به 100 نرسه.
    اما در کل حل همچین مشکلی حداقل به کد کامل هر دو برنامه نیازه. به علاوه داشتن دسترسی به محیط اجرای برنامه هم تاثیر مثبتی داره .
    شما که هیچ اطلاعاتی رو قرار ندادید و این کار رو خیلی سخت میکنه . با این وجود موارد بالا رو در نظر داشته بشید شاید مشکلتون حل شد.
    آخرین ویرایش به وسیله pe32_64 : پنج شنبه 07 آذر 1398 در 15:53 عصر

  3. #3
    کاربر دائمی آواتار Esikhoob
    تاریخ عضویت
    شهریور 1385
    محل زندگی
    Tehran
    پست
    277

    نقل قول: وقتی چند پروسه از این برنامه با هم اجرا می‌شوند، برنامه هنگ میکند؟ چرا؟

    از راهنماییتان خیلی ممنون
    من در این چند روز که از طرح سوال میگذرد یک به یک احتمالهایی که خودم در بالا داده بودم را رد کردم و فهمیدم که دلیل اشکال نیستند.
    من هم با نظر شما موافقم که مشکل مدیریت منابع(حافظه) داریم. این برنامه مثل یک service است (یک exe معمولی است که با روشن شدن کامپیوتر، اجرا میشود) و همیشه اجرا است، هر وقت کاری بیاید انجام میدهد وگرنه منتظر میماند. به نظرم باید سر زمانهایی برنامه را reset کنیم.
    آخرین ویرایش به وسیله Esikhoob : پنج شنبه 07 آذر 1398 در 12:07 عصر دلیل: نقطه

  4. #4

    نقل قول: وقتی چند پروسه از این برنامه با هم اجرا می‌شوند، برنامه هنگ میکند؟ چرا؟

    نقل قول نوشته شده توسط Esikhoob مشاهده تاپیک
    از راهنماییتان خیلی ممنون
    من در این چند روز که از طرح سوال میگذرد یک به یک احتمالهایی که خودم در بالا داده بودم را رد کردم و فهمیدم که دلیل اشکال نیستند.
    من هم با نظر شما موافقم که مشکل مدیریت منابع(حافظه) داریم. این برنامه مثل یک service است (یک exe معمولی است که با روشن شدن کامپیوتر، اجرا میشود) و همیشه اجرا است، هر وقت کاری بیاید انجام میدهد وگرنه منتظر میماند. به نظرم باید سر زمانهایی برنامه را reset کنیم.
    ابزار برا کنترل و مانیتورینگ برنامه برا ویندوز کم یاب نیست .تشخیص نشت حافظه service تون با این ابزار ها وقعا کار سختی نیست .
    ریست کردن که نشد راه حل !

  5. #5
    کاربر دائمی آواتار Esikhoob
    تاریخ عضویت
    شهریور 1385
    محل زندگی
    Tehran
    پست
    277

    نقل قول: وقتی چند پروسه از این برنامه با هم اجرا می‌شوند، برنامه هنگ میکند؟ چرا؟

    نقل قول نوشته شده توسط pe32_64 مشاهده تاپیک
    . . . . ریست کردن که نشد راه حل !
    بله، من سابقه برنامه نویسی زیاد دارم، ولی تا به حال حتی یک خط هم با ++C ننوشتم و با نشت حافظه بیگانه ام؛ اما در کار با Windows مهارت بسیار دارم و به یادگیری ++C علاقه بسیاری دارم، برای همین است که از موقع پرسیدن این سوال تا به حال در حال آموزش و مونیتور کردن حافظه Windows با همین ابزارهای مونیتورینگ هستم و به راه حل ساده ریست کردن بسنده نکردم. خوشحالم که میبینم این کار من از دید برنامه نویسان ++C هم درست است.
    الان با برنامه Windbg در لحظه hang این برنامه این اطلاعات را بدست آوردم:
    0:012> !threads
    ThreadCount: 32
    UnstartedThread: 0
    BackgroundThread: 5
    PendingThread: 0
    DeadThread: 26
    Hosted Runtime: no
    Lock
    ID OSID ThreadOBJ State GC Mode GC Alloc Context Domain Count Apt Exception
    0 1 a54 007642d8 2a020 Preemptive 55A1C7AC:00000000 0075e860 0 MTA
    2 2 848 00774008 2b220 Preemptive 00000000:00000000 0075e860 0 MTA (Finalizer)
    3 3 f34 03b287a8 8029220 Preemptive 00000000:00000000 0075e860 0 MTA (Threadpool Completion Port)
    4 4 10b4 03c0aef0 102a220 Preemptive 00000000:00000000 0075e860 0 MTA (Threadpool Worker)
    8 6 f04 03baa5c0 1020220 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 41 0 00771840 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 47 0 007722d0 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 27 0 00770db0 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 31 0 00771d88 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 46 0 00770868 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 32 0 007712f8 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 21 0 15a57560 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 5 0 15a5aa30 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 19 0 15a56588 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 45 0 15a555b0 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 26 0 15a55af8 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 48 0 15a57ff0 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 40 0 15a57018 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 38 0 15a54b20 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 13 0 15a59fa0 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 23 0 15a55068 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 15 0 15a59a58 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 35 0 15a5a4e8 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 17 0 15a56040 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 8 0 15a57aa8 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 12 0 15a58538 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 30 0 15a58a80 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 14 0 15a530b8 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 20 0 15a56ad0 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    XXXX 28 0 15a58fc8 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    11 16 df8 15a53b48 21220 Cooperative 00000000:00000000 0075e860 0 Ukn
    XXXX 33 0 15a53600 1039820 Preemptive 00000000:00000000 0075e860 0 Ukn (Threadpool Worker)
    0:012> !syncblk
    Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner
    -----------------------------
    Total 181
    CCW 7
    RCW 10
    ComClassFactory 1
    Free 115
    0:012> !DumpHeap -type Interop
    Address MT Size
    01158e78 72e1ef94 12
    01158ff4 72e1ef94 12
    0115907c 72e1ef94 12
    .
    .
    .
    011590f0 72e1ef94 12
    558390f8 0c8b87a4 12
    55839ac4 0c8b87a4 12
    55839adc 0cc930e8 32
    55842344 0c8b87a4 12
    55842350 0cc954b8 36
    55842bec 0c8b87a4 12
    558432cc 0c8b87a4 12
    55a1c740 72e39ef4 12

    Statistics:
    MT Count TotalSize Class Name
    72e1edb0 1 12 System.Runtime.InteropServices.GuidAttribute
    042ebe54 1 16 SolidFramework.Interop.StringMarshaler
    03e8cb1c 1 16 Sdl.MultiTerm.Common.Interop.MtCommonClass
    03e8c138 1 16 Sdl.MultiTerm.Server.Interop.MtUtilityClass
    03e8ae80 1 16 Sdl.MultiTerm.Server.Interop.MtCatalogServerClass
    03e8a9b8 1 16 Sdl.MultiTerm.Server.Interop.MtServerClass
    72e39ef4 2 24 System.Runtime.InteropServices.GCHandle
    6c8b3850 1 32 System.Runtime.Interop.UnsafeNativeMethods+EtwEnab leCallback
    03e8cdc0 2 32 Sdl.MultiTerm.Server.Interop.MtSearchCountClass
    03e8bf78 2 32 Sdl.MultiTerm.Server.Interop.MtSearchExClass
    03e8bbc0 2 32 Sdl.MultiTerm.Server.Interop.MtTermbaseClass
    72e3792c 3 48 System.Runtime.InteropServices.HandleRef
    72e1ef94 14 168 System.Runtime.InteropServices.ComVisibleAttribute
    0cc930e8 188 6016 Sdl.FileTypeSupport.Filters.MicrosoftOffice.Previe w.PowerPoint.PowerPointInteropFacade
    0cc954b8 282 10152 Sdl.FileTypeSupport.Filters.MicrosoftOffice.Previe w.Excel.ExcelInteropFacade
    0c8b87a4 846 10152 Sdl.FileTypeSupport.Filters.MicrosoftOffice.Previe w.Helpers.OfficeInteropLoader
    Total 1348 objects


    من در تفسیر این مطالب عاجزم، آیا تعداد DeadThread: 26 طبیعی است؟
    با CCW 7 و RCW 10 باید چه کار کرد؟
    آخرین ویرایش به وسیله Esikhoob : پنج شنبه 14 آذر 1398 در 11:49 صبح


تاپیک های مشابه

  1. خواندن قسمتی از یک صفحه وب بوسله PHP
    نوشته شده توسط mr.fotouh در بخش PHP
    پاسخ: 0
    آخرین پست: دوشنبه 18 اردیبهشت 1391, 23:12 عصر
  2. طرز کار آنتی ویروسها
    نوشته شده توسط .:KeihanCPU:. در بخش برنامه نویسی در 6 VB
    پاسخ: 20
    آخرین پست: دوشنبه 30 اردیبهشت 1387, 01:06 صبح
  3. دور زدن آنتی ویروسها
    نوشته شده توسط illegalyasync در بخش امنیت در نرم افزار و برنامه نویسی
    پاسخ: 6
    آخرین پست: یک شنبه 28 مرداد 1386, 17:15 عصر
  4. بحث پیرامون ویروسها و آنتی ویروسها
    نوشته شده توسط civ0003 در بخش برنامه نویسی اسمبلی خانواده x86
    پاسخ: 32
    آخرین پست: سه شنبه 09 مرداد 1386, 15:59 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •