แก้ไข: โหลดซ้ำและการยกเลิกการโหลดของ Mtxdm.dll สาเหตุ 1 MB หน่วยความจำเสมือนรั่ว

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 232351
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

อาการ

เมื่อมีการโหลด และการโหลด Mtxdm.dll ภายในวน 1 เมกะไบต์รั่วไหลที่อยู่ในหน่วยความจำเสมือนเห็นกับทุกคำซ้ำถึงลูป

นี่คือมักจะเกิดขึ้นในโปรแกรมประยุกต์ ที่ใช้การเชื่อมต่อ ODBC การทำซ้ำการเชื่อมต่อและ disconnections จากฐานข้อมูล backend หรือโปรแกรมประยุกต์ ODBC ที่ทำการเชื่อมต่อและ disconnections เพื่อ backend Oracle เป็นจำนวนมาก

สาเหตุ

กำลังเกิดการรั่วไหลในหน่วยความจำเสมือน โดยการเรียกไปที่ TerminateThread() ภายใน Mtxdm.dll

เมื่อการเชื่อมต่อถูกใช้ภายในโปรแกรมประยุกต์ ODBC ผู้จัดการ Dispenser (Mtxdm.dll) จะถูกโหลดเพื่อจัดการประเภทการเชื่อมต่อ ซึ่งถูกจัดการ โดยตัวทำงานของเธรดที่เริ่มต้นการใช้งานภายใน Mtxdm.dll

เมื่อโปรแกรมประยุกต์จบ ตัวทำงานของเธรด killed โดยมีการเรียกไปยัง TerminateThread() ซึ่งจะล้าง และ 1 เมกะไบต์ของหน่วยความจำที่จัดสรรสำหรับเธรดคนงานกองที่ว่าง

ลักษณะการทำงานเดียวกันนี้สามารถมองเห็นได้เมื่อทำการเชื่อมต่อที่ซ้ำและ disconnections กับเซิร์ฟเวอร์ฐานข้อมูล Oracle เนื่องจากโปรแกรมควบคุม Microsoft Oracle ODBC โหลด Mtxdm.dll ว่า การเชื่อมต่อถูกใช้ หรือไม่

การแก้ไข

เมื่อต้องแก้ไขปัญหานี้ ให้ขอรับ service pack ล่าสุดสำหรับ Windows NT 4.0 หรือการปรับปรุงซอฟต์แวร์แต่ละตัว สำหรับข้อมูลในการได้รับ service pack ล่าสุด โปรดไปที่:
สำหรับข้อมูลในการได้รับการปรับปรุงซอฟต์แวร์แต่ละ ติดต่อบริการสนับสนุนผลิตภัณฑ์ของ Microsoft สำหรับรายการทั้งหมดของหมายเลขโทรศัพท์บริการการสนับสนุนผลิตภัณฑ์ของ Microsoft และข้อมูลเกี่ยวกับการสนับสนุน กรุณาไปยังอยู่ต่อไปนี้บนเวิลด์ไวด์เว็บ:

เซิร์ฟเวอร์ Windows NT หรือเวิร์กสเตชัน 4.0

เมื่อต้องแก้ไขปัญหานี้ ให้ขอรับ service pack ล่าสุดสำหรับ Windows NT 4.0 หรือการปรับปรุงซอฟต์แวร์แต่ละตัว สำหรับข้อมูลในการได้รับ service pack ล่าสุด โปรดไปที่:
  • Windows Service Pack Center- หรือ -

  • 152734วิธีการขอรับ service pack ล่าสุดของ windows nt 4.0
สำหรับข้อมูลในการได้รับการปรับปรุงซอฟต์แวร์แต่ละ ติดต่อบริการสนับสนุนผลิตภัณฑ์ของ Microsoft สำหรับรายการทั้งหมดของหมายเลขโทรศัพท์บริการการสนับสนุนผลิตภัณฑ์ของ Microsoft และข้อมูลเกี่ยวกับการสนับสนุน กรุณาไปยังอยู่ต่อไปนี้บนเวิลด์ไวด์เว็บ:

เซิร์ฟเวอร์ Windows NT 4.0 รุ่นของเซิร์ฟเวอร์เทอร์มินัล

เมื่อต้องแก้ไขปัญหานี้ ให้ขอรับ service pack ล่าสุดสำหรับ Windows NT Server 4.0, Terminal Server Edition สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในการ ฐานความรู้ของ Microsoft:
152734 วิธีการขอรับ Service Pack ล่าสุดของ Windows NT 4.0

สถานะ

Microsoft ยืนยันว่า ปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ที่ตอนต้นของบทความนี้ ปัญหานี้ถูกแก้ไขใน Windows NT Server เวอร์ชัน 4.0, Terminal Server Edition Service Pack 6 ครั้งแรก

ข้อมูลเพิ่มเติม

การติดตั้งโปรแกรมแก้ไขด่วน 051099a ด้วยตนเอง

หมายเหตุ: การขอรับโปรแกรมแก้ไขด่วนนี้ คุณต้องติดต่อบริการสนับสนุนผลิตภัณฑ์ของ Microsoft โปรดดูส่วนการแก้ปัญหาของบทความนี้สำหรับข้อมูลเพิ่มเติม
  1. ปิด หรือหยุดใด ๆ โปรแกรมประยุกต์หรือบริการที่ใช้ Mtxdm.dll ซึ่งอาจรวมถึง Internet Information Server (IIS), Microsoft ธุรกรรมเซิร์ฟเวอร์ (MTS), Microsoft แจกจ่ายธุรกรรมผู้ประสานงาน (DTC), และโปรแกรมประยุกต์ใด ๆ ที่ ADO หรือ ODBC
  2. ดาวน์โหลดโปรแกรมแก้ไขด่วน (051099a.exe) ลงในไดเรกทอรีชั่วคราว และเรียกใช้งานการขยายแฟ้มต่อไปนี้:
    • Mmtxdm.dll
    • อ่าน Readme.txt
  3. ค้นหา และเปลี่ยนชื่อเป็น Mtxdm.dll ซึ่งควรอยู่ ในโฟลเดอร์ \Winnt\System32 สำหรับคอมพิวเตอร์ที่ใช้ Windows NT และ ในโฟลเดอร์ \Windows\System สำหรับคอมพิวเตอร์ที่ใช้ Windows 9 x รุ่นปัจจุบัน
  4. โปรแกรมแก้ไขด่วนรุ่น Mtxdm.dll การคัดลอกไปยังตำแหน่งที่ตั้งเดียวกัน และเริ่มการทำงานของบริการและโปรแกรมประยุกต์

ขั้นตอนในการทบทวนเกิดลักษณะการทำงาน

สร้างโปรแกรมประยุกต์คอนโซล C/c ++ที่ใช้รหัสต่อไปนี้ เรียกใช้โปรแกรมประยุกต์นี้ในขณะที่ใช้ตัวตรวจสอบประสิทธิภาพการทำงานเพื่อดูเสมือนไบต์สำหรับแอพลิเคชัน

หมายเหตุ: โค้ดตัวอย่างนี้ใช้แหล่งข้อมูล ODBC ที่เชื่อมต่อกับอิน backend Oracle เนื่องจากโปรแกรมควบคุม Microsoft Oracle ODBC โหลด Mtxdm.dll และอื่น ๆ ได้อย่างง่ายดายแสดงปัญหา
   #include        <windows.h>
   #include        <stdio.h>
   #include        <sql.h>
   #include        <sqlext.h>
   #include        <assert.h>

   #define CK_RT(x) if( x != SQL_SUCCESS && x != SQL_SUCCESS_WITH_INFO)    assert(0)

   void main(){
       HENV        henv;
       HDBC        hdbc;
       RETCODE     rc = SQL_SUCCESS;
       char        *dsnStr="DSN=OracleServer;UID=scott;pwd=tiger;";
       short       rtnLen = 0;
       UCHAR       rtnDSN[999] = "";
       int         i,x;


       for (i=0; i < 100; i++)
   	{
               rc = SQLAllocEnv(&henv);
               CK_RT(rc);
               rc = SQLAllocConnect(henv, &hdbc);
               CK_RT(rc);
               rc = SQLDriverConnect(hdbc,
                         NULL,
                         (unsigned char *)dsnStr,
                         strlen(dsnStr),
                         rtnDSN,
                         255,
                         &rtnLen,
                         SQL_DRIVER_NOPROMPT);

               CK_RT(rc);
               SQLDisconnect(hdbc);
               SQLFreeConnect(hdbc);
               SQLFreeEnv(henv);
	   }
   }
				

คุณสมบัติ

หมายเลขบทความ (Article ID): 232351 - รีวิวครั้งสุดท้าย: 13 มิถุนายน 2555 - Revision: 3.0
Keywords: 
kbqfe kbhotfixserver kbbug kbfix kbmdac210fix kbmts200fix kbsdkodbc351fix kbvirtualmem kbmt KB232351 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:232351

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com