原创 python requests接收chunked編碼問題

         很久以前寫爬蟲用C++和libcurl來實現,體會了libcurl的複雜和強大,後來學會了python,才發現用python+urllib/urllib2寫爬蟲比C++來得容易,再後來發現了python的requests

原创 systemtap雙指針(多級指針)解引用

剛學systemtap不久,沒有找到雙指針或者多級指針的解引用api,只好自己實現一個了。 #include <stdio.h> struct test { char *a; int b; }; static voi

原创 Linux下反彙編指定的函數

在debug二進制程序的時候,偶爾會用到反彙編,有時候也想反彙編指定的函數,那麼以下有兩種方法可以試試:用objdump的-d參數或者gdb的disassemble命令: 一、用objdump的-d參數,但不能指定函數名,objdump還

原创 碼如其人

古人云【字如其人】,在互聯網時代,對我們碼農來說,也可以說【碼如其人】。 孤獨者:字與字之間的距離極小。 豪放者:字體較大,筆畫舒展。 謹慎者:字體較小,基本上不會寫或不寫潦草的字。 有毅力者:筆壓很重。 熱情的人:字體大、筆畫柔、書寫流

原创 Cavium SSL加速卡驅動移植到Ubuntu

因爲cavium ssl加速卡的驅動指定的系統是Fedora,而我們的系統是Ubuntu,所以肯定要移植了,看一下Release_Notes.txt裏面的Supported Features: Supported Features =

原创 SystemTap使用技巧【四】

1、查看內核文件中函數的執行流程         前段時間研究了一下Linux內核信號處理流程,記錄一下用到的技巧吧。         其實如果不用工具,硬是看代碼去分析這個信號處理流程的話,還真的可能搞不定,因爲不知道看到的代碼是否得到

原创 進程異常退出導致死鎖的解決辦法

       最近碰到這麼一個問題:程序先獲得鎖,然後進行一些操作,操作完成之後再把鎖釋放掉,然而在獲得鎖之後進行的一些操作中可能導致程序異常退出(比如段錯誤),可以看出還沒有來得及把鎖釋放進程就蹦掉了,從而導致這個鎖長期沒有被釋放,其他

原创 通用開地址hash表

在《算法精解:C語言描述》中看到兩個hash表的實現,一個是鏈式hash表,一個是開地址hash表,我在平時工作的項目中用到了開地址hash表,也做了一些修改和優化,在這裏分享一下,原理不想重複講了,網上或者書上都有,這裏只講我修改的代碼

原创 源碼剖析signal和sigaction的區別

        這兩個函數都是Linux下注冊信號處理函數有關,但是它們的區別一般我們都是從書上、網上、man手冊得知,要想對它們的區別瞭然於胸,源碼剖析纔是徹底的方法。先來看這兩個函數的區別和實驗: 一、實驗         1、sig

原创 ldns老版本隱藏得比較深的bug

問題:         我在nginx中fork出一個進程來專門做DNS解析的工作,在本地開發環境中一切正常,而在線上服務器環境中這個進程就不定期的死掉重啓,而且還不太容易復現。 排查:         直接在線上服務器開啓coredum

原创 SystemTap使用技巧【三】

1、查看代碼執行路徑      在分析代碼的時候,能清晰地觀察代碼執行路徑對Debug效率很有幫助,比如,最近在分析內核tcp回覆ack的代碼執行路徑的時候就用到這個技巧,看看下面是tcp回覆ack的代碼:      我想看看代碼執行到

原创 ThinkPHP獲取帶條件數據總條數(行數)

首先來看一下分頁原理: 比如下面這個表: 總共有31條數據,篩選出sex爲男的SQL爲: select * from user where sex='男'; sex爲男的有20條數據,那怎麼知道sex爲男的有20條數據呢,當然是用SQ

原创 nginx內存池基本原理及問題

nginx的內存池相關文章已經很多了,這裏寫一下簡單原理和最近碰到的問題。 用到的幾個結構,相應說明請看註釋: //每次能從pool分配的最大內存塊大小,ngx_pagesize在X86下一般是4096,即4k,也就是說每次能從pool

原创 SystemTap使用技巧【二】

1、獲取數據結構成員     比如數據結構如下: root@jusse ~/develop# cat -n cc_stap_test.c 1 #include <stdio.h> 2 3 typed

原创 Linux線上系統程序debug思路及方法

       很多程序長期在線上系統跑着,可能跑着跑着就coredump了,而這種bug比較難復現,這個問題估計困擾不少同行朋友,這裏記錄一下我的一些思路,如有不對之處,歡迎指正。 1、coredump文件        這個方法很基礎了