| Sasha Pivovarova |
翻譯
Linux epoll
- epoll_create 大致上就是建立一個 epoll fd 出來。
- epoll_ctl 有三種 opt,ADD/MOD/DEL 可以使用
- epoll_wait 會回傳 timeout 內所有進來的 event,timeout可以設定為 -1,就是 block 到有新連線進來為止。
Benchmarking 127.0.0.1 (be patient)…apr_pollset_poll: The timeout specified has expired (70007)
最後了解到,是因為 epoll 並沒有維護 socket 的 timeout ,導致沒有人去關閉 socket 連線,而 ab 因此 timeout。
現在的解法是維護一個 fd 的 timeout table ,如果 timeout 的話就把 socket 關閉。這樣雖然讓 ab 可以測試成功,但是卻也犧牲了原本 epoll 想要做到的事情 – 不要去 iteration 一個表。
code 可以看這邊:https://github.com/grapherd/server-framework/blob/epoll/playground/ep.c
想法來源看這邊:http://stackoverflow.com/questions/10772208/epoll-and-timeouts
了解以後,明天回頭去看 reactor pattern,這邊 有提到現在 server 都是專注在不同 I/O pattern 上來加速。
gdb 技巧 *2
- p *variable 就行了
- 太醜? set print pretty on
-
1gdb –ex “set pagination 0” –ex “thread apply all bt” <br /> —batch –p $(pidof mysqld)<span style=“font-family: “times new roman“;”><span style=“white-space: normal;”><br /></span></span>
Leave a Reply