2007年3月7日水曜日

(FreeBSD) unlimit datasizeしても512MBまで?

最近気がついたのですが、いつのころからか、FreeBSDは、unlimit datasizeしても、512MBまでしか割り当てられないようになっていました。



% limit
cputime      unlimited
filesize     unlimited
datasize     524288 kbytes
stacksize    65536 kbytes
coredumpsize 0 kbytes
memoryuse    unlimited
vmemoryuse   unlimited
descriptors  11095
memorylocked unlimited
maxproc      5547
sbsize       unlimited



% unlimit datasize
% limit datasize
datasize     524288 kbytes



% limit datasize 512m
% limit datasize 513m
limit: datasize: Can't set limit (Operation not permitted)



余談ですが、limitunlimitはcsh系のbuilt-in commandであり、sh系の場合は、ulimitになります。


以前は2GBくらいまでできていたので、どこかで制限がかけられるようになったんだろうな、という予想は立ちます。というわけで見つけたのが、これ。




limit datasize

http://lists.freebsd.org/pipermail/freebsd-questions/2006-April/119717.html



これだっ!、と思ったら、なんと、変数名が間違ってるじゃないですか。

/boot/loader.conf
に書くのは正しいのですが、kern.maxdsizeじゃなくて、kern.maxdsizが正解。同じく、kern.maxssizeではなくkern.maxssizです。



/boot/defaults/loader.confより



#kern.maxdsiz=""                # Set the max data size
#kern.maxssiz=""                # Set the max stack size



というわけで、/boot/loader.confに

kern.maxdsiz="2G"

と書けば、2GBまで割り当て可能になります。



GとかMとか単位を書いていいのかな?と気になったので、一応、ソースコードを追いかけてみました(マニュアルなどのドキュメントが見つからない…)。



src/sys/kern/kern_environment.c



の中の、getenv_quadという関数で、GとかMとかの解釈をしているので大丈夫でした。



調子にのって、"3G"とか指定すると、ブートしなくなりますので注意!

initがこけてpanic rebootします。
single userモードでも起動しなくなります。

もしやってしまった場合は~~~ようするに、やってしまったんですが(笑)~~~、ブート時に、ブートメニューから、コマンドライン形式のブートローダに抜けて、直接パラメータを変更します。たしか、



set kern.maxdsiz=512M



とかしてから、とりあえずOSをブートさせたあとに、/boot/loader.confを書き直せばよかったと思います


☆ ☆ ☆ 



風邪が治らないなぁ



20070306




0 件のコメント:

コメントを投稿