sshd
マシンのRAMが不足しているために動作しなくなることがある開発サーバーがあります。はい、メモリが不足しており、現在のところアップグレードは適切な選択ではありません。私がやりたいのは、マシンに「あなたがやりたいことは何でもやりましょう。ただし、20MBとCPUを省いてsshd
ください!」です。
どうすればできますか?
sshd
行儀され、私はそれではないだろう、使用するのに十分なCPU / RAMがない場合、それは立ち往生と思いますか?
sshd
マシンのRAMが不足しているために動作しなくなることがある開発サーバーがあります。はい、メモリが不足しており、現在のところアップグレードは適切な選択ではありません。私がやりたいのは、マシンに「あなたがやりたいことは何でもやりましょう。ただし、20MBとCPUを省いてsshd
ください!」です。
どうすればできますか?
sshd
行儀され、私はそれではないだろう、使用するのに十分なCPU / RAMがない場合、それは立ち往生と思いますか?
回答:
メモリリソースコントローラーでcgroupsを使用することで、おそらくそのようなことを実現できます。
リソースを消費するすべてのタスクを制限された(CPUとRAM)に配置しcgroup
、sshd
制限されないように「外部」のままにしておくと思います。
(ただし、スワップファイルの形式であっても、スワップを追加することは良い選択肢かもしれません。)
ああ、cgroupsは簡単です:) libcgroupパッケージをインストールします。/etc/cgconfig.confを作成します。
mount {
cpu = /cgroup/cpu_and_mem;
cpuacct = /cgroup/cpu_and_mem;
memory = /cgroup/cpu_and_mem;
}
group sshd {
cpu {
cpu.shares="500";
}
cpuacct {
cpuacct.usage="0";
}
memory {
memory.limit_in_bytes="1G";
}
}
group nosshd {
cpu {
cpu.shares="500";
}
cpuacct {
cpuacct.usage="0";
}
memory {
memory.limit_in_bytes="1G";
}
}
cgconfig
階層、cgroupを作成し、制限を設定するプロセスを開始します。それが成功した場合、CPUの50%が割り当てられ、1Gのメモリが使用可能な2つのcgroupがあります(使用可能なメモリの実際の量はわかりません。この例では2Gであると仮定します)。ここで、すべてのタスク(つまり、システムで実行されているすべてのプロセス)をルートグループからnosshd cgroupに移動するだけです。
cgroup]# cat tasks >> nosshd/tasks
cgroup]# echo > tasks
次に、sshd
プロセスのPIDを取得し、それをsshdタスクファイルに移動するだけです。
cgroup]# echo $PID >> sshd/tasks
タダ、完了です。これで、sshdには常にCPUの50%と1Gのメモリがあるので安心できます。
のrenice
より高い優先度を取得するsshd
か、アカウンティングを確認するために使用します。(acct)->これでユーザーのリソースを設定できるので、sshdをsで実行します
ionice
て、おそらくsshdを起動して、後でそれを無視しないでください。