靜態編譯的MySQL易掛起

2021-09-06 08:29:17 字數 1284 閱讀 1039

anysql.net » blog archive » 靜態編譯的mysql易掛起

mysql »

2009-06-22

事情源於發現轉給sql-bench程式的引數寫錯了, 想測試一下innodb上的效果的, 要指定所有表的預設建表選項, 於是用control + c中斷了正在執行的程式, 用中斷的方式換了幾個引數後, 突然發現mysql掛起了, 用"show status"命令檢視mysql的運**況時, 發現大部份效能統計數值都不再變化. 以為是一時的情況, 沒想到今天集團同事也遇到了同樣的問題, 於是去重試了一下, 兩個control + c就讓mysql掛起了. 掛起後mysql不能讀寫磁碟上所有磁碟上的表, 不能建立innodb表, myisam表, 連記憶體表也不能建立, 情況很嚴重.

記憶體是足夠的, mysql的程序數也只有17個, 系統資源肯定不是問題. 用strace看了一下, 出錯後也沒有什麼有用的出錯資訊.

write(3, "\16\0\0\0\4columns_priv\0", 18) = 18

read(3, 0x71c150, 16384)    = -1 eintr (interrupted system call)

--- sigint (interrupt) @ 0 (0) ---

read(3, 0x71c150, 16384)    = -1 eintr (interrupted system call)

--- sigint (interrupt) @ 0 (0) ---

read(3, 0x71c150, 16384)    = -1 eintr (interrupted system call)

--- sigint (interrupt) @ 0 (0) ---

read(3, 0x71c150, 16384)    = -1 eintr (interrupted system call)

--- sigint (interrupt) @ 0 (0) ---

於是請了**的mysql高手過來診斷, 他發現我的mysql是靜態編譯(據說這種編譯方式下效能更好)的, 就是在編譯時用了如下的選項.

--with-mysqld-ldflags=-all-static

--with-client-ldflags=-all-static

估計是這個有問題, 靜態編譯和動態編譯會使用不同的執行緒庫(具體情況不清楚), 很有可能是這個問題, 就去掉了這兩個選項重新編譯了一下. 然後繼續control + c了幾十次, 都沒有能再重現掛起的情況.

QT的靜態編譯

qt預設的編譯方式是動態編譯的,但是有時候你編寫的程式要發布出去,帶很多動態庫檔案是很繁瑣的,此時就需要靜態編譯你的程式,qt要實現靜態編譯必須庫檔案也是靜態編譯的,可以用這個命令編譯靜態庫 配置編譯選項 開啟 qtdir mkspecs win32 g qmake.conf qtdir 為qt庫所...

qt的靜態編譯

在預設情況下,用qtcreator編譯程式時,使用的是動態編譯。但是動態編譯執行時會依賴多種的dll庫檔案,在打包的過程中也需要帶上一大堆的dll庫檔案,否則無法執行。靜態編譯可以將需要的庫檔案直接載入到程式中,打包時不需要帶各種庫檔案,且可執行檔案exe會比動態編譯的要小很多。參考鏈結檢視具體完成...

靜態編譯與動態編譯的區別

靜態編譯與動態編譯的區別 動態編譯的可執行檔案需要附帶乙個的動態鏈結庫,在執行時,需要呼叫其對應動態鏈結庫中的命令。所以其優點一方面是縮小了執行檔案本身的體積,另一方面是加快了編譯速度,節省了系統資源。缺點一是哪怕是很簡單的程式,只用到了鏈結庫中的一兩條命令,也需要附帶乙個相對龐大的鏈結庫 二是如果...