core dumpの解析手法

について書くはずだったんだけど何を書くのかわすれた!

とりあえず基礎的なことについてまとめておく。

バイナリはunstrippedなものを使用

できれば-gオプションこみでコンパイルしておく。

coredumpを吐くようにbashを設定

ulimit組み込みコマンドを使用

ulimit -c unlimited

実行&落とす!

(core dumped)の文字を確認。core.PIDという名でコアダンプができてるハズ

gdbデバッグ

gdb バイナリ コアファイル

あとはスタックを解析するなり変数の値を確認するなりお好きにどうぞ!

writevによるTCPパケット最適化

小さいwrite(2)を大量に呼んでいると、予想以上に細かいパケットがちまちま送信されてしまい、スループットの低下につながることがある。

writev(2)を用いることで、連続したメモリ領域にないデータを一回のシステムコールで送信することができる。この際、データが一つのパケットにまとめられやすくなる。

同様の最適化は、linux依存になるが、TCP_CORKを活用しても可能らしい。下記URL参考:

http://www.baus.net/on-tcp_cork