1. 程式人生 > >記錄一個__lll_lock_wait_private錯誤

記錄一個__lll_lock_wait_private錯誤

  一個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,clone
      1 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

  直覺上覺得是磁碟空間滿了,讓他看了下,磁碟空間還很富裕,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)

  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 }

  呼叫的python指令碼如下:

  1 import subprocess
  2 import os
  3 import time
  4
  5 ret = {}
  6
  7 cmd = "./a.out >/tmp/log"
  8
  9 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);

  執行此python指令碼,會發現很快a.out就被hang住了,表現是/tmp/log不再有新的輸出,程式呼叫棧如下:

     49 __lll_lock_wait_private,_L_lock_12956,buffered_vfprintf,vfprintf,fprintf,thr_fn,start_thread,clone
      1 write,_IO_new_file_write,_IO_new_file_xsputn,buffered_vfprintf,vfprintf,fprintf,thr_fn,start_thread,clone
      1 nanosleep,sleep,main

  解決此問題,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...."

相關推薦

記錄一個__lll_lock_wait_private錯誤

  一個DBA同事昨天在執行一個命令列工具的時候發現程式hang住,問題挺有意思,值得記錄下。   首先用pstack看了下程式的呼叫棧,這是個多執行緒程式,pstack結果看到幾乎所有的執行緒都等在write呼叫上。如下是pt-pmp的輸出結果: Tue May 27 18:30:06 CST 20

記錄一個mybatis編寫xml遇到的錯誤:java.lang.unsupportedOperationException

查找 ava mybatis dset ring 執行 ont 編寫 res 寫完xml裏的sql在執行xml中的sql時報錯,經過排查找到問題出在方法中的resultType這個屬性的類型上 如圖所示:只需要將sortedSet改為set集合裏所存儲的對象的類型即可。

一個錯誤記錄

erro 元素 錯誤記錄 不存在 解決 not 情況 不可 fff 有些人經常會碰到這樣的情況Uncaught TypeError: Cannot set property ‘style‘ of null 其實這是一個小錯誤他的意思是JS沒有找到相應ID的元素,所以不可以修

記錄一個自己放的小錯誤,python程式設計的,要注意同名變數!!!

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data import numpy as np import matplotlib.pyplot as plt tf.set_random_s

_____[BUG]記錄一個jdk安裝錯誤 error: open of failed:No such file or directory

今天在一臺新機器, 採用rpm方式安裝jdk, rpm -ivh jdk-8u181-linux-i586.rpm  安裝過程發生了錯誤, 錯誤資訊包含大量的html相關資訊: error: open of <html> failed: No such f

記錄一個錯誤:COM程序外伺服器的啟動

在完成所有的程序外原始碼編輯後,生成了相應的.exe檔案。根據書上說“COM解決的辦法是維護一個被登記的類廠的內部表格,根據客戶請求的CLISD得到相應的類廠。若找不到相應類廠,COM將在登錄檔中查詢並啟動相應的EXE,此EXE可呼叫COM函式CoRegiste

Android 記錄一個智障錯誤

Android動態申請許可權 private val permissions= arrayOf( "READ_EXTERNAL_STORAGE", "WRITE_EXTERNAL_STORAGE") 感覺好像沒什麼問

記錄一個詭異的函式呼叫返回錯誤的指標bug

//main.c#include "test.h" void main(){ S* s = get_struct_s(); printf("%s\n",s->name); return 0; }//test.h typedef struct S_

Jmeter--記錄一個使用CSV Data Set Config犯的低階錯誤

關於Jmeter的這個元件CSV Data Set Config網上已有大量篇幅的文章去接受,並且介紹的都挺詳細,這裡就不再介紹。這裡主要介紹第一次使用此元件時犯的錯誤。 當指令碼完成後,點選執行,但是在察看結果樹中沒有發現執行結果,可以說點選執行後,指令碼沒有執行。遮蔽掉

華為OJ:開發一個簡單錯誤記錄功能小模組,能夠記錄出錯的程式碼所在的檔名稱和行號。

用到了類string的length(), size(),find_first_of(),find_last_of(),substr(),push_back()函式  #include <iostream> #include <algorithm> #

記錄一個奇怪的錯誤,javax.mail.MessagingException: Failed to load IMAP envelope(Android development)

前言 遇到問題,多溝通,冷靜分析,即能解決! 錯誤截圖 上面兩個圖就是出現這個錯誤的log,我用的是JavaMail1.6.0正式版,使用IMAP收取公司郵箱郵件的時候出現的這個問題,可

vs的一個奇葩錯誤 : 未能找到任何適合於指定的區域性或非特定區域性的資源...

完全 rac pub strac 問題 load oschina orm pac 摘要: VS2005下進行開發的時候遇到的問頭:未能找到任何適合於指定的區域性或非特定區域性的資源。請確保在編譯時已將“xxx.Form1.resources”正確嵌入或鏈接到程序集“xxx”

記錄一個有意思的問題……

插入數據 暴露 dynamic ring 一個表 意義 發現 無法 操作 今天業務開發出現了一個有意思的問題: 一段操作邏輯裏,兩次update同一個表,如果兩次updated偶成功,則對另一個表進行一次insert操作 兩次update是用的同一個方法,傳入參數對象屬性值

Ubuntu14環境下minigui安裝問題記錄--object.lo錯誤

error blog trac san data stat object.lo ubun rom minigui3.0.12在Ubuntu14上面編譯只是去?出現

LaTex學習記錄——一個簡單的封面

LaTex TeXstudio 操作系統:Ubuntu 14.04LTS;工具:TeXstudio;此外,我還安裝了完全的texlive(sudo apt-get install texlive-full,比較大,大家可以酌情安裝部分)。??在實際工作中,在文章中使用圖片是比較普遍的,這裏介紹一個簡單

記錄一個lync 2013前端服務器警告日誌ID31196

lync 2013問題描述:dc是正常的,上面的防火墻也都關閉了,Lync前端一直如下警告 日誌名稱: Lync Server來源: LS Response Group Service日期: 2011/7/6 12:01:01事件 ID:

zabbix安裝中的一個錯誤

端口 tail Oz shadow 9.png pro app 數據庫 HA 今天安裝了下zabbix3.4,前面一直安裝比較順利,然而web登陸後發現出現了小錯誤,我的zabbix服務端10051端口無法監聽,我重啟了幾次服務端,然而還是報這錯誤。。 排查了半天也沒發現

記錄一個卡了半年的maven問題

png 創建 現象 工程 心情 最終 項目 tom star 項目是maven+dubbo+zookeeper工程 現象:zookeeper服務註冊正常: 但Web工程啟動找不到Service服務: 找Bug過程中經歷了無數過程,幾乎窮舉,改過Pom,查過Tomcat,

記錄一個python裏面很神奇的操作,對一個包含列表的元組進行增量賦值,成功賦值但還報錯

png code error peer 列表 mage pictures 但是 stack 記錄一個python裏面很神奇的操作 今天記錄一個很神奇的操作。關於序列的增量賦值。如果你很熟悉增量賦值,你也不妨看下去,我想說的是有關於增量賦值和元組之間一種神奇的操作。來自 《流

記錄一個bug

inf ram png 一個bug img sdn 網頁 execution http [ ERROR ] Caught exception while allowing TestExecutionListener [org.springframework.test.con