-PR-
解決
済み

Linuxでのメモリ使用量制限

  • 困ってます
  • 質問No.12928
  • 閲覧数2983
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 57% (108/188)

大学生です。研究室内のコンピューターを管理してます。
環境は、Vine Linux2.0です。
最近、やたらとフリーズするので、調べてみたら
プログラミングを間違って、メモリを食いつぶしてしまのが原因。
プログラムの開発は、日常茶飯事なので、
どうにか、ユーザーが起動するプロセスが使うメモリの
上限値を設定したいのですが、可能でしょうか?
quotaは、ディスクの容量制限だけですよね?
niceも、プロセスの優先度変えるだけですし。
どなたか、よろしくご教授、お願いします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.4
レベル13

ベストアンサー率 37% (570/1525)

確認します。
問題のプログラムはulimitコマンドを実行したシェルの子プロセスとして実行していますか。
そうでない場合、ulimitの制限を受けません。

それから、データセグメントサイズの上限設定は-dだったような気がします(すみません、未確認です)。

あと、bashの特定バージョンは特定のコンピュータでulimit(の一部)が変更できません。
確認できているのは「bash1.1.4.xでHPのマシンにおいてcoreサイズの変更ができない」などです。
bashのソースを変更すれば大丈夫らしいのですが、詳細は失念しました。
ただ、2.0以上ではこの話は聞きませんのでvine2.0という新しいディストリビューション上のbashなら大丈夫だとは思います。
お礼コメント
nekomilk

お礼率 57% (108/188)

できました!! ありがとうございました。
無限にmallocするプログラムをかいて
トップで眺めていたら、確かに 100M付近で
mallocできなくなっています。
ありがとうございました。
投稿日時 - 0000-00-00 00:00:00
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1

下記の検索システムを使って検索できなければ http://his.luky.org/ML/ 素直に、VineUsersMLに参加して質問してみてください ...続きを読む
下記の検索システムを使って検索できなければ
http://his.luky.org/ML/

素直に、VineUsersMLに参加して質問してみてください
お礼コメント
nekomilk

お礼率 57% (108/188)

便利なURLを教えて頂きありがとうごさいました。
いままで、サーチエンジンでしか調べてなかったの
ですが、今後からこういうとこも
利用していきます。
ありがとうございました。
投稿日時 - 0000-00-00 00:00:00


  • 回答No.2

プログラム作成側からいうと・・・ 結局メモリの食いつぶしって、バグですよね。 だとしたら、それをなくさなければ、大事な プログラムは使い物にならないので、再起動を してでもバグつぶしは大切だと思いますよ。 少なくともメモリ制限なんてのができてしまったら バグ取りがわからなくなった上に、他の人にも 迷惑がかかりますから、私はしょっちゅう 再起動しています。 #Windowsマシンので・ ...続きを読む
プログラム作成側からいうと・・・
結局メモリの食いつぶしって、バグですよね。
だとしたら、それをなくさなければ、大事な
プログラムは使い物にならないので、再起動を
してでもバグつぶしは大切だと思いますよ。

少なくともメモリ制限なんてのができてしまったら
バグ取りがわからなくなった上に、他の人にも
迷惑がかかりますから、私はしょっちゅう
再起動しています。
#Windowsマシンので・・・

ではでは☆
お礼コメント
nekomilk

お礼率 57% (108/188)

そうなんです。バグなんです。
本来は、1しかメモリを食わないのに、
100も1000も使おうとするのです。
そうすると、そのプログラムの起動の度に、
そのマシンが落ちてしまうので、
(そうなると、他のユーザーが困るので)
それを防ぐ為に、制限をかけたいのです。
投稿日時 - 0000-00-00 00:00:00
  • 回答No.3
レベル13

ベストアンサー率 37% (570/1525)

linuxでプロセスメモリの上限値を決めるのはlimit系のシェルコマンドです。 bashならulimit、tcshならlimitです。 .loginに組みこめば値を再設定するまで有効です。 ただ、「メモリの食いつぶし」でlinuxがフリーズするという状況が飲みこめません。仮想空間を使いすぎてスワップ領域が無くなっているのですか? その場合、スワップパーテーションを増やす方が賢明です。 理由 ...続きを読む
linuxでプロセスメモリの上限値を決めるのはlimit系のシェルコマンドです。
bashならulimit、tcshならlimitです。
.loginに組みこめば値を再設定するまで有効です。

ただ、「メモリの食いつぶし」でlinuxがフリーズするという状況が飲みこめません。仮想空間を使いすぎてスワップ領域が無くなっているのですか?
その場合、スワップパーテーションを増やす方が賢明です。
理由はKanataさんがおっしゃる通りです。

通常、linuxではスワップ領域を越えるようなプロセスの起動はできません。
malloc(3)系の動的確保はスワップ領域を使用する前にアロケーションエラーが発生します。
Unix System V R2.xの時代には「小さなプロセスが大きなプロセスにexec(2)したときにメモリ不足でシステムがハングすることがある」というバグがありましたがlinuxでその系統のバグは聞いたことがありません。
補足コメント
nekomilk

お礼率 57% (108/188)

ありがとうございます。確かに、そういうコマンドが
ありました!
けど、ulimit -m 1000 とやっても 1Mbyte以上の
プロセスが起動できて、しまいます。
ulimit -a とやれば、確かに設定はできてるみたいですが
それだけでは、だめなのでしょうか?

スワップは、300Mくらいとっていて、多分
フリーズというより、スワップが頻繁に起こっている
状態かもしれません。
投稿日時 - 2000-11-14 07:52:01
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ