FreeBSD でカーネルスペースのメモリを調べる2016年08月01日 11時57分53秒

メーリングリストに流れたコマンド例。
% vmstat -m | sort -rnk 2,3 | head -n 10
    sysctloid  5257   167K       -     5394  16,32,64,128
       devbuf  3858  3107K       -     5107  16,32,64,128,256,512,1024,2048,4096,8192,65536
       acpica  2274   120K       -   122889  16,32,64,128,256,512,1024,2048,4096
          bus  1461    72K       -     8788  16,32,64,128,256,1024
      i915gem   878   155K       -   564247  16,32,64,128,256,512,1024,2048,4096,8192
         GEOM   655   101K       -     6016  16,32,64,128,256,512,1024,2048,8192,16384
         umtx   552    52K       -      552  64,128
       module   543    35K       -      544  64,128
     gem_name   473    16K       -     6444  16,2048
     drm_sman   437    28K       -     4193  64
         kobj   385   770K       -     1202  2048
      kdtrace   344    69K       -     1729  64,256
vmstat の -m でカーネルメモリの割当を表示し、第二、第三コラムで並べ直している。出力は私の機械での例。

古い機種で FreeBSD が動かなくなっていた2016年07月06日 21時21分51秒

FreeBSD 10.1 は起動できるが、10.2 から駄目なようだ。ほとんど電気を付けていなかった機種なので、最近になって気が付いた。

暇を持て余すようだったら、原因の切り分けをしてみたいものだが…。取り敢えず、stable/10 の 276686 辺りから探る必要がありそう。

10.1 RELEASE は不安定な気がする2015年02月01日 10時03分04秒

FreeBSD 10.1 RELEASE に移行して結構たつが、やっぱりパニックが起きる。三台ある機械の中で一台でしか再現がしない。zfs などメモリを使う物によわい。また Xorg を利用中にも落ちることがある。こちらも同じカーネルメモリの枯渇。

vm_thread_new: kstack allocation failed

がその時に出るエラー。

最初は Xorg や zfs 、vt コンソールを疑っていたが、どうもそうではないようだ。単純に make -C /usr/src buildworld -j 300で、問題を起こせる。vfork が失敗して、プロセスを作ることが出来なくなる。

他の二台で試したが、-j 300 でも大丈夫。問題のある機械で 11-CURRENT と 10.0-RELEASE を試したが、こちらも問題無し。10.1-RELEASE にのみに起きているみたいだ。

FreeBSD 10.0 で動かなくなったもの2014年06月18日 10時42分35秒

FreeBSD 10.0 の動作確認をしているが、ggated/ggatec の GEOM gate と mount_ntfs が動いていないようだ。ただ、どちらの二つとも長年パッチを当あてていたので、手元の問題の可能性の方が高い。

GGATE は rctp を使ったり、ipv6 のサポートとその他細々したのから独自修正も当てていた。8 系から 9.x だか 10.x にだかの変更で、スペースの量の調整が行われ、パッチが当たらなくなり、面倒臭くなってこちらの変更は取り敢えず捨てた。なので、素の状態のはずだが。もう少し様子を見る必要がある。

mount_ntfs の方は、mount のファイルシステムの認識を弄っていたので、直接ではないが、もしかしたら影響があったのかも知れない。外部 mount の呼び出しで、誤認識を良くしていたから書き換えていたのだが、nmount で新たにサポートが増えていたとしたら、おかしくなっているだろう。

そんなわけで今回は自分の環境の防備録。

std::stream での読み込みの例2012年07月29日 11時15分51秒

std::stream で入力を処理したいが、読み込みのループはちょくちょく使うのでメモ。istream::getline を使うので、文字入力用。

この例では、std::cout で出力。std::cout を任意に書き換えて使う。


void process_input(const char* filename)
{
    char buffer[1024];
    std::istream *in = NULL;
 
    if(filename == NULL || "-" == filename)
        in = &std::cin;
    else
        in = new std::ifstream(filename);
 
    while(in->good())
    {
        in->getline(buffer, sizeof(buffer));
        if(*buffer == 0)
            break;
        std::cout << buffer << std::endl;
    }
    if(in != &std::cin)
        delete in;
}

buffer の最初が 0 であれば、処理を止める。また、good() で無い場合も終了。これは EOF も含まれる。

なお、ios::good() と !ios::bad() は等価では無い。ios::bad() は EOF を含めないからだ。

snapshot ディレクトリ2011年03月29日 06時23分04秒

どんなディスクか、ファイルシステムを使っているのかは知らないが、現在利用中のシステムでは、自動的にバックアップが取られているようだ。

$ ls .snapshot
hourly.0                         hourly.4
hourly.1                         hourly.5
hourly.2                         
hourly.3

唯一の欠点は .snapshot にアクセスしないと見られないのだが、ディレクトリ名をよく忘れること。.backup 等を探して時間を潰してしまう。

Calculator2009年11月16日 11時20分55秒

ブラウザから使える算術計算機はこれが一番使いやすいと思う。

Windows をベースとして使っていると、十六進が使えるまともな計算機が入っていない事も多い。これが、余計なインストールなども必要無くて、好んで使っている。

FreeBSD で無線のアクセスポイントを検索2009年07月01日 18時58分28秒

以前は無線のアクセスポイントを探す時は、専用のコマンドがあった。最近では ifconfig に取り込まれている。ifconfig も多機能になり、man を読むだけ、流し見するだけでも一苦労だ。度忘れした時など、途方にくれる時もある。

ifconfig にインターフェースを渡し、list scan とすると、近くにあるアクセスポイントを見つけられる。


# igconfig wpi0 list scan
SSID            BSSID              CHAN RATE   S:N     INT CAPS
My Home         00:3c:g0:ke:d3:b4    1   54M   4:0    100 EPS  WPA
Apple Network   00:23:32:h8:77:4f    9   54M  16:0    100 EPS  RSN HTCAP WME
degault         00:33:44:ed:02:40    6   54M  18:0    100 ES   ATH
linksys-a       00:0g:46:dz:64:74    6   54M   4:0    100 ES
linksys         00:3e:e5:84:a2:13    6   54M   3:0    100 EP   WPS WPA

なお、この例では、SSID や BSSID 等は若干変えてある。

他にも、ifconfig wpi0 scanifconfig wpi0 list ap 等でも似たような結果が得られる。違いは man で確認して欲しい。

bash/readline2008年11月06日 11時23分55秒

すこし調べ物をしていたら、bash の設定で .inputrc に

set convert-meta off
set meta-flag on
set output-meta on

記述しておくと、日本語の直接入力と表示が出来るとの事をちらほら見付けた。

そのようなものは設定していないが、特に問題なく使えている。理由は良く分からない。X 上のターミナルだからなのだか、kinput2 が動いているからなのだか。

少々、気になった。

prstat on Sun2008年10月01日 00時38分28秒

Sun の機械を何台も行き来していると、top の様に比較的新しいコマンドが無いことがある。

Sun/Solaris で各プロセス毎の CPU の利用率を見るのに、prstat が使える。top の様に、一定間隔で画面を再描画するため、プロセスの様子を監視するのに使う。

top の出力の方が好みだが、無いものは使えない。ふと、prstat の名前をド忘れしてしまい困った経験がある。