FIX: Memuat ulang dan membongkar Mtxdm.dll menyebabkan kebocoran kehabisan memori Virtual 1 MB

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 232351
Perbesar semua | Perkecil semua

Pada Halaman ini

GEJALA

Ketika pemuatan bongkar Mtxdm.dll dalam sebuah loop, 1 MB kebocoran di kehabisan memori virtual terlihat dengan setiap perulangan melalui loop.

Hal ini kemungkinan besar terjadi pada aplikasi yang menggunakan ODBC connection pooling dan membuat ulang sambungan dan pemutusan dari backend database, atau ODBC aplikasi yang membuat banyak koneksi dan pemutusan untuk Oracle backend.

PENYEBAB

Kebocoran di kehabisan memori virtual adalah disebabkan oleh panggilan untuk TerminateThread() dalam Mtxdm.dll.

Ketika koneksi penggabungan digunakan dalam aplikasi ODBC, Dispenser Manager (Mtxdm.dll) dimuat untuk mengelola koneksi kolam renang, yang ditangani oleh thread pekerja yang dimulai dalam Mtxdm.dll.

Ketika aplikasi berakhir, kain pekerja tewas oleh panggilan untuk TerminateThread(), yang tidak akan Bersihkan dan gratis 1 MB kehabisan memori dialokasikan untuk kain pekerja tumpukan.

Perilaku ini sama dapat dilihat ketika membuat ulang sambungan dan pemutusan ke server database Oracle, karena pengandar Microsoft Oracle ODBC beban Mtxdm.dll Apakah connection pooling sedang digunakan atau tidak.

PEMECAHAN MASALAH

Untuk mengatasi masalah ini, Dapatkan paket layanan terbaru untuk Windows NT 4.0 atau pemutakhiran software individu. Untuk informasi tentang memperoleh paket layanan terbaru, silahkan pergi ke:
Untuk informasi tentang memperoleh pemutakhiran software individu, hubungi Layanan Dukungan Produk Microsoft. Untuk daftar lengkap nomor telepon Layanan Dukungan Produk Microsoft dan informasi mengenai biaya dukungan, silahkan kunjungi alamat penyuratan berikut di World Wide Web:
http://support.Microsoft.com/default.aspx?scid=Fh;EN-US;CNTACTMS

Windows NT Server atau Workstation 4.0

Untuk mengatasi masalah ini, Dapatkan paket layanan terbaru untuk Windows NT 4.0 atau pemutakhiran software individu. Untuk informasi tentang memperoleh paket layanan terbaru, silahkan pergi ke:
  • Windows Service Pack Center- atau -

  • 152734cara mendapatkan paket layanan windows nt 4.0
Untuk informasi tentang memperoleh pemutakhiran software individu, hubungi Layanan Dukungan Produk Microsoft. Untuk daftar lengkap nomor telepon Layanan Dukungan Produk Microsoft dan informasi mengenai biaya dukungan, silahkan kunjungi alamat penyuratan berikut di World Wide Web:
http://support.Microsoft.com/default.aspx?scid=Fh;EN-US;CNTACTMS

Windows NT Server 4.0, Terminal Server Edition

Untuk mengatasi masalah ini, Dapatkan paket layanan terbaru untuk Windows NT Server 4.0, Terminal Server Edition. Untuk informasi tambahan, klik nomor artikel berikut ini untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
152734 Cara mendapatkan paket layanan Windows NT 4.0

STATUS

Microsoft telah mengkonfirmasi bahwa ini merupakan masalah di dalam produk Microsoft yang didaftar pada awal artikel ini. Masalah ini pertama kali dikoreksi pada Windows NT Server versi 4.0, Terminal Server Edition Service Pack 6.

INFORMASI LEBIH LANJUT

Instalasi manual perbaikan terbaru 051099a

Catatan: Untuk mendapatkan perbaikan terbaru ini, Anda harus menghubungi Layanan Dukungan Produk Microsoft. Silakan lihat bagian pemecahan masalah artikel ini untuk informasi lebih lanjut.
  1. Menutup atau berhenti setiap aplikasi atau layanan yang menggunakan Mtxdm.dll. Ini mungkin termasuk Internet Information Server (IIS), Microsoft transaksi Server (MTS), Microsoft didistribusikan transaksi Koordinator (DTC), dan setiap ADO atau ODBC aplikasi.
  2. Men-download hotfix (051099a.exe) ke direktori sementara dan menjalankannya untuk mengekstrak berkas berikut:
    • Mmtxdm.dll
    • Readme.txt
  3. Cari dan mengubah versi Mtxdm.dll, yang harus di folder \Winnt\System32 untuk Windows NT komputer, dan dalam folder \Windows\System untuk Windows 9 x komputer.
  4. Salin versi perbaikan terbaru dari Mtxdm.dll ke lokasi yang sama, dan me-restart layanan dan aplikasi.

Langkah-langkah untuk mereproduksi perilaku

Membuat aplikasi konsol C/c ++ yang menggunakan kode berikut. Menjalankan aplikasi ini sewaktu menggunakan Monitor kinerja untuk melihat Virtual byte untuk aplikasi.

Catatan: sampel kode ini menggunakan ODBC data sumber yang terhubung ke Oracle backend, karena pengandar Microsoft Oracle ODBC beban Mtxdm.dll, dan lebih mudah menunjukkan masalah.
   #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);
	   }
   }
				

Properti

ID Artikel: 232351 - Kajian Terakhir: 13 Juni 2012 - Revisi: 3.0
Kata kunci: 
kbqfe kbhotfixserver kbbug kbfix kbmdac210fix kbmts200fix kbsdkodbc351fix kbvirtualmem kbmt KB232351 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini: 232351

Berikan Masukan

 

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