ブックマーク / blogs.itmedia.co.jp/komata (3)
-
以前の記事にもLinuxでのメモリーリークの検出に関する事を書いたのですが、もう少し一般的なやり方を紹介しましょう︵というより、自分で毎回忘れるので備忘録として・・・︶。 ︻mtraceを使う方法︼ まず、mtraceを使う方法です。リークのテストを開始したい場所でmtrace()をコールし、終了したい場所でmuntrace()をコールするようにします。 #include <stdio.h> #include <stdlib.h> char *test() { char *test=malloc(10); return(test); } int main() { char *ptr; mtrace(); ptr=test(); //*(ptr+10)='\0'; //free(ptr); muntrace(); return(0); } -gつきでコ
-
今日も昨日に続き、高性能ハード・ネットワーク環境で試行錯誤していました。今日、まずクリアーしたかったのが、スレッド数の壁です。多数のTCP/IPコネクションを扱うプログラムの場合、作りやすさから、スレッドを多用することがほとんどなのですが、昨日やってみた感じだと、OS全体で32767個くらいで、﹁Cannot allocate memory﹂エラーが発生していました。 Linuxの場合、カーネルのパラメーターを調整することで、様々な上限値を変えることができるのですが、パラメーターの数が多く、どれがどの場合に有効かがわかりにくいのです。 結局は、kernel.threads-maxと、kernel.pid_max、vm.max_map_countを増やせば、スレッド数が増やせた、という感じでした。 ﹁ sysctl -w kernel.threads-max=600000 sysctl -w
-
連載中︵?︶のsendmsg(),recvmsg()を使ったUDP送受信プログラムですが、いよいよIPv6です。IPv6ではIPV6_PKTINFOがどの処理系でも使えるので簡単、と思ったのですが、やってみると意外と苦労しました。。 まず、setsockopt()で指定するのは、IPV6_PKTINFOではなく、IPV6_RECVPKTINFOでないと駄目、というのが、SolarisとLinuxで、そもそもIPV6_RECVPKTINFOが無いのがBSD︵MacOSX︶というところで苦労しました。RECVPKTINFOと言っているのにsendmsg()にも効果があるのでなぜ?と思ったら、送信するときにはsetsockopt()しなくても、指定すれば有効になるみたいです。同じソケットで送信も受信もするならセットすることになるので、まあ、しておくことにしておけばいい感じです。 つづいて、str
-
1