原创 SystemTap----將SystemTap腳本編譯成內核模塊

  當運行SystemTap腳本時,會根據腳本生成一個內核模塊,然後插入到系統中執行後退出。這個過程總共分爲5個階段:parse, elaborate, translate, compile, run,對應的編號爲1-5.stap命令的-

原创 解決接收不到組播包的問題

   目前用的集羣是在應用層實現的,主要功能是實現在機器之間互轉請求。今天在部署的時候,發現請求沒有在節點之間互轉,相同的請求發送一次後miss,第二次發送的時候還是miss。正常來說,第一次miss後會在集羣內緩存一份,之後再有關於這個

原创 探究Linux下參數傳遞及查看和修改方法

   X86-64下有16個64位寄存器,其中%rdi、%rsi、%rdx,%rcx、%r8、%r9用作傳遞函數參數,分別對應第1個參數、第2個參數直到第6個參數,如下圖所示(圖片來自網絡):   如果函數的參數個數超過6個,則超過的參

原创 gdb:循環打印數組

  今天爲了精確查看集羣中哈希表中每個機器佔有的槽位數,所以需要在gdb中進行統計。哈希表是一個大的數組,如果直接使用gdb輸出數量太大,而且沒法統

原创 SystemTap----初始化和遍歷數組

   SystemTap數組中的索引項可以是long或者string類型(systemtap的基本類型),訪問數組項的方式和C語言類似,數組名[索引]。例如odds[x],odds是數組名,x是索引。SystemTap中的數組必須聲明爲

原创 gdb:不退出程序的情況下打印函數中的局部變量

參考資料:點擊打開鏈接   藉助於上面的參考資料,編寫自己的腳本工具。參考資料中也是借鑑pstack這個工具,它是用一個腳本,腳本中通過調用gdb來

原创 SystemTap----常用變量、宏、函數和技巧

後面會持續更新,方便自己,方便大家....... 一、宏 1. kderef 從指定的地址處讀取指定大小的值 格式爲: kderef(size, address); 其中address爲要讀取的地址值,size是要是讀取的值的

原创 實戰RPM包製作

  在開發中經常會用到一些rpm包,但是一直沒有自己手動製作過。今天在製作的時候意外地還解決了自己以前一直困惑的問題,就是怎麼製作rpm debug

原创 類型轉換導致的程序異常

 通過下面的程序來介紹: #include <stdio.h> int main(void) { int i; unsigned long long type = 0; unsigned long long a

原创 利用glibc中鎖結構的信息解決死鎖問題

   首先非常感謝老丁和老李同學的幫助,沒有他們這個問題估計又得搞很久。遇見這個問題,真是頭疼。不熟悉代碼、不熟悉流程,但是領導還是把活給排下來了(實在不解),只能硬着頭皮找了。 問題是這樣的,cache服務器中有一個存儲對象的哈希表,每

原创 爲什麼服務器程序在部署時需要調度器?

   隨着互聯網規模的不斷擴大,服務器承載的壓力也不斷增加,對服務的質量要求也越來越高。最理想的情況是,使用低成本的服務器,承載更大的壓力,並且7x24小時不中斷服務。通常使用的方式就是部署集羣,調度器+服務器+存儲這樣的架構。注意,集羣

原创 Linux中查看是否是固態硬盤(SSD)

   最近在準備測試,需要看看哪些機器掛載的是ssd硬盤,Google了一圈看到了許多方法,但都雲裏霧裏的,不知道怎麼確定。ssd硬盤貌似使用的也是scsi接口,所以根據盤符的名稱也是判斷不出來的。最後羣裏eric大神告知lsscsi工具

原创 IP數據包的輸入與輸出

IP層主要函數之間的調用關係如下圖所示: 上面的圖主要是拷貝的《Linux內核源碼剖析----TCP/IP實現上冊》中的圖11.3,原圖中有部分錯誤,所以這裏重新繪製了一下,並且去掉了一些冗餘的部分。 下面簡述一下數據包傳遞的大致過

原创 CentOS下利用sshpass不用手動輸入密碼遠程執行命令

   在測試的時候要同時操作多臺機器,每次都要挨個去執行幾乎相同的命令或者修改一些設置,這樣很影響工作效率也很煩,所以就想寫一個腳本,遠程自動去做這些操作。遠程執行命令很簡單,但是不能在執行命令加上命令,還得手動輸入,放在腳本里肯定不行。

原创 SystemTap----thread_indent()函數分析

thread_indent是systemtap中一個非常有用的函數,聲明如下: thread_indent:string(delta:long) 它可以輸出當前probe所處的可執行程序名稱、線程id、函數執行的相對時間和執行