Rumah pangkalan data tutorial mysql 记录一个__lll_lock_wait_private错误

记录一个__lll_lock_wait_private错误

Jun 01, 2016 pm 01:12 PM
write blog multithreading teknologi program

一个DBA同事昨天在执行一个命令行工具的时候发现程序hang住,问题挺有意思,值得记录下。

首先用pstack看了下程序的调用栈,这是个多线程程序,pstack结果看到几乎所有的线程都等在write调用上。如下是pt-pmp的输出结果:

Tue May 27 18:30:06 CST 2014 55 __lll_lock_wait_private,_L_lock_51,fwrite,LoadConsumer::run,CThread::hook,start_thread,clone1 write,_IO_new_file_write,_IO_new_file_xsputn,buffered_vfprintf,vfprintf,fprintf,LoadManager::dump,LoadProducer::load_file,LoadProducer::run,CThread::hook,start_thread,clone
Salin selepas log masuk

直觉上觉得是磁盘空间满了,让他看了下,磁盘空间还很富裕,touch创建文件也没任何问题,当时此机器上还在跑一个备份程序,IO压力不小,不过和问题本身应该关系不大。Google了下__lll_lock_wait_private这个错误,也没任何有用的信息。这个工具程序本身会向一个命令行指定的日志文件输出很多程序执行结果,同时会向stderr输出程序的执行状态,gdb attach看了下程序具体的调用栈,发现程序都阻塞在fprintf(stderr)上。咨询了下同事,他使用这个工具是通过一个python脚本调用的,调用的程序类似如下:

p = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,close_fds=True)
Salin selepas log masuk

cmd是调用程序的命令行,包括一系列选项。问题看起来很清晰了,通过python调用此命令行工具时,stdout和stderr都被重定向了subprocess.PIPE,但没有程序从此PIPE读取,那么很快这个PIPE自身的buffer都写满了,pstack看到的结果就是所有write都阻塞。

写了个小程序重现了下,程序如下(随手写的..):

1 #include <stdio.h>2 #include <pthread.h>3 #include <unistd.h>4 void *thr_fn(void *arg)5 {6 int i =0;7 while(true)8 {9 i++; 10 fprintf(stderr, "helloworld %d/t/t/t/t",i); 11 fprintf(stdout, "kkkkkkkkkk %d/t/t/t/t",i); 12 sleep(1); 13 } 14 } 15 16 int main(void) 17 { 18 for (int i = 0; i!= 50; i++) 19 { 20 pthread_t tid; 21 pthread_create(&tid, NULL, thr_fn, NULL); 22 } 23 24 sleep(100000); 25 }</unistd.h></pthread.h></stdio.h>
Salin selepas log masuk

调用的python脚本如下:

1 import subprocess2 import os3 import time45 ret = {}67 cmd = "./a.out >/tmp/log"89 p = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,close_fds=True) 10 11 ret['status'] = p.wait() 12 ret['msg'] = p.stdout.readlines() 13 14 time.sleep(100000000);
Salin selepas log masuk

执行此python脚本,会发现很快a.out就被hang住了,表现是/tmp/log不再有新的输出,程序调用栈如下:

49 __lll_lock_wait_private,_L_lock_12956,buffered_vfprintf,vfprintf,fprintf,thr_fn,start_thread,clone1 write,_IO_new_file_write,_IO_new_file_xsputn,buffered_vfprintf,vfprintf,fprintf,thr_fn,start_thread,clone1 nanosleep,sleep,main
Salin selepas log masuk

解决此问题,1)maybe subprocess.Popen这个程序参数可以改改?2)或者在cmd里边将stdout/stderr都重定向掉;3)写命令行程序的时候要注意,调用的脚本各种写法都可能有,因此写日志尽量还是要规范,不要向stdout/stderr输出过多的东西。

组里开发的同事补充了下MySQL遇到__lll_lock_wait_private 错误的常见场景:

"这个函数调用在mysql上最典型的场景就是开启cgroup时会经常碰到这个,例如memcpy, mem alloc, free , mutext lock/unlock...."

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menjadikan Peta Google sebagai peta lalai dalam iPhone Bagaimana untuk menjadikan Peta Google sebagai peta lalai dalam iPhone Apr 17, 2024 pm 07:34 PM

Peta lalai pada iPhone ialah Peta, pembekal geolokasi proprietari Apple. Walaupun peta semakin baik, ia tidak berfungsi dengan baik di luar Amerika Syarikat. Ia tiada apa-apa untuk ditawarkan berbanding Peta Google. Dalam artikel ini, kami membincangkan langkah yang boleh dilaksanakan untuk menggunakan Peta Google untuk menjadi peta lalai pada iPhone anda. Cara Menjadikan Peta Google Peta Lalai dalam iPhone Menetapkan Peta Google sebagai aplikasi peta lalai pada telefon anda adalah lebih mudah daripada yang anda fikirkan. Ikut langkah di bawah – Langkah prasyarat – Anda mesti memasang Gmail pada telefon anda. Langkah 1 – Buka AppStore. Langkah 2 – Cari “Gmail”. Langkah 3 – Klik di sebelah apl Gmail

Apl jam tiada dalam iPhone: Cara membetulkannya Apl jam tiada dalam iPhone: Cara membetulkannya May 03, 2024 pm 09:19 PM

Adakah apl jam hilang dari telefon anda? Tarikh dan masa masih akan dipaparkan pada bar status iPhone anda. Walau bagaimanapun, tanpa apl Jam, anda tidak akan dapat menggunakan jam dunia, jam randik, jam penggera dan banyak ciri lain. Oleh itu, membetulkan apl jam yang hilang hendaklah berada di bahagian atas senarai tugasan anda. Penyelesaian ini boleh membantu anda menyelesaikan isu ini. Betulkan 1 – Letakkan Apl Jam Jika anda tersilap mengalih keluar apl Jam daripada skrin utama anda, anda boleh meletakkan semula apl Jam pada tempatnya. Langkah 1 – Buka kunci iPhone anda dan mula meleret ke kiri sehingga anda mencapai halaman Pustaka Apl. Langkah 2 – Seterusnya, cari "jam" dalam kotak carian. Langkah 3 – Apabila anda melihat "Jam" di bawah dalam hasil carian, tekan dan tahan dan

Tidak boleh membenarkan akses kepada kamera dan mikrofon dalam iPhone Tidak boleh membenarkan akses kepada kamera dan mikrofon dalam iPhone Apr 23, 2024 am 11:13 AM

Adakah anda mendapat "Tidak dapat membenarkan akses kepada kamera dan mikrofon" apabila cuba menggunakan apl itu? Biasanya, anda memberikan kebenaran kamera dan mikrofon kepada orang tertentu berdasarkan keperluan untuk disediakan. Walau bagaimanapun, jika anda menafikan kebenaran, kamera dan mikrofon tidak akan berfungsi dan sebaliknya akan memaparkan mesej ralat ini. Menyelesaikan masalah ini adalah sangat asas dan anda boleh melakukannya dalam satu atau dua minit. Betulkan 1 – Sediakan Kebenaran Kamera, Mikrofon Anda boleh memberikan kebenaran kamera dan mikrofon yang diperlukan secara terus dalam tetapan. Langkah 1 – Pergi ke tab Tetapan. Langkah 2 – Buka panel Privasi & Keselamatan. Langkah 3 – Hidupkan kebenaran "Kamera" di sana. Langkah 4 – Di dalam, anda akan menemui senarai apl yang telah meminta kebenaran untuk kamera telefon anda. Langkah 5 – Buka "Kamera" apl yang ditentukan

Pengecualian fungsi C++ dan multithreading: pengendalian ralat dalam persekitaran serentak Pengecualian fungsi C++ dan multithreading: pengendalian ralat dalam persekitaran serentak May 04, 2024 pm 04:42 PM

Pengendalian pengecualian fungsi dalam C++ amat penting untuk persekitaran berbilang benang untuk memastikan keselamatan benang dan integriti data. Pernyataan cuba-tangkap membolehkan anda menangkap dan mengendalikan jenis pengecualian tertentu apabila ia berlaku untuk mengelakkan ranap program atau rasuah data.

Penggunaan rangka kerja ujian unit JUnit dalam persekitaran berbilang benang Penggunaan rangka kerja ujian unit JUnit dalam persekitaran berbilang benang Apr 18, 2024 pm 03:12 PM

Terdapat dua pendekatan biasa apabila menggunakan JUnit dalam persekitaran berbilang benang: ujian berbenang tunggal dan ujian berbilang benang. Ujian berutas tunggal dijalankan pada utas utama untuk mengelakkan isu konkurensi, manakala ujian berbilang utas dijalankan pada utas pekerja dan memerlukan pendekatan ujian disegerakkan untuk memastikan sumber yang dikongsi tidak terganggu. Kes penggunaan biasa termasuk menguji kaedah selamat berbilang benang, seperti menggunakan ConcurrentHashMap untuk menyimpan pasangan nilai kunci, dan utas serentak untuk beroperasi pada pasangan nilai kunci dan mengesahkan ketepatannya, mencerminkan aplikasi JUnit dalam persekitaran berbilang benang. .

Bagaimanakah concurrency dan multithreading fungsi Java boleh meningkatkan prestasi? Bagaimanakah concurrency dan multithreading fungsi Java boleh meningkatkan prestasi? Apr 26, 2024 pm 04:15 PM

Teknik concurrency dan multithreading menggunakan fungsi Java boleh meningkatkan prestasi aplikasi, termasuk langkah berikut: Memahami konsep concurrency dan multithreading. Manfaatkan pustaka konkurensi dan berbilang benang Java seperti ExecutorService dan Callable. Amalkan kes seperti pendaraban matriks berbilang benang untuk memendekkan masa pelaksanaan. Nikmati kelebihan peningkatan kelajuan tindak balas aplikasi dan kecekapan pemprosesan yang dioptimumkan yang dibawa oleh concurrency dan multi-threading.

Bagaimana untuk melaksanakan multi-threading dalam PHP? Bagaimana untuk melaksanakan multi-threading dalam PHP? May 06, 2024 pm 09:54 PM

PHP multithreading merujuk kepada menjalankan berbilang tugas secara serentak dalam satu proses, yang dicapai dengan mencipta benang berjalan secara bebas. Anda boleh menggunakan sambungan Pthreads dalam PHP untuk mensimulasikan tingkah laku berbilang benang Selepas pemasangan, anda boleh menggunakan kelas Thread untuk mencipta dan memulakan utas. Contohnya, apabila memproses sejumlah besar data, data boleh dibahagikan kepada berbilang blok dan bilangan benang yang sepadan boleh dibuat untuk memprosesnya secara serentak untuk meningkatkan kecekapan.

Bagaimanakah fungsi PHP berkelakuan dalam persekitaran berbilang benang? Bagaimanakah fungsi PHP berkelakuan dalam persekitaran berbilang benang? Apr 16, 2024 am 10:48 AM

Dalam persekitaran berbilang benang, gelagat fungsi PHP bergantung pada jenisnya: Fungsi biasa: thread-safe, boleh dilaksanakan secara serentak. Fungsi yang mengubah suai pembolehubah global: tidak selamat, perlu menggunakan mekanisme penyegerakan. Fungsi operasi fail: tidak selamat, perlu menggunakan mekanisme penyegerakan untuk menyelaraskan akses. Fungsi operasi pangkalan data: Mekanisme sistem pangkalan data yang tidak selamat perlu digunakan untuk mengelakkan konflik.

See all articles