• ベストアンサー

Linuxでのメモリ使用量制限

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

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

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.4

確認します。 問題のプログラムはulimitコマンドを実行したシェルの子プロセスとして実行していますか。 そうでない場合、ulimitの制限を受けません。 それから、データセグメントサイズの上限設定は-dだったような気がします(すみません、未確認です)。 あと、bashの特定バージョンは特定のコンピュータでulimit(の一部)が変更できません。 確認できているのは「bash1.1.4.xでHPのマシンにおいてcoreサイズの変更ができない」などです。 bashのソースを変更すれば大丈夫らしいのですが、詳細は失念しました。 ただ、2.0以上ではこの話は聞きませんのでvine2.0という新しいディストリビューション上のbashなら大丈夫だとは思います。

nekomilk
質問者

お礼

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

その他の回答 (3)

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.3

linuxでプロセスメモリの上限値を決めるのはlimit系のシェルコマンドです。 bashならulimit、tcshならlimitです。 .loginに組みこめば値を再設定するまで有効です。 ただ、「メモリの食いつぶし」でlinuxがフリーズするという状況が飲みこめません。仮想空間を使いすぎてスワップ領域が無くなっているのですか? その場合、スワップパーテーションを増やす方が賢明です。 理由はKanataさんがおっしゃる通りです。 通常、linuxではスワップ領域を越えるようなプロセスの起動はできません。 malloc(3)系の動的確保はスワップ領域を使用する前にアロケーションエラーが発生します。 Unix System V R2.xの時代には「小さなプロセスが大きなプロセスにexec(2)したときにメモリ不足でシステムがハングすることがある」というバグがありましたがlinuxでその系統のバグは聞いたことがありません。

nekomilk
質問者

補足

ありがとうございます。確かに、そういうコマンドが ありました! けど、ulimit -m 1000 とやっても 1Mbyte以上の プロセスが起動できて、しまいます。 ulimit -a とやれば、確かに設定はできてるみたいですが それだけでは、だめなのでしょうか? スワップは、300Mくらいとっていて、多分 フリーズというより、スワップが頻繁に起こっている 状態かもしれません。

noname#9414
noname#9414
回答No.2

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

nekomilk
質問者

お礼

そうなんです。バグなんです。 本来は、1しかメモリを食わないのに、 100も1000も使おうとするのです。 そうすると、そのプログラムの起動の度に、 そのマシンが落ちてしまうので、 (そうなると、他のユーザーが困るので) それを防ぐ為に、制限をかけたいのです。

noname#271
noname#271
回答No.1

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

nekomilk
質問者

お礼

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

関連するQ&A

  • 5,6年前のPCにLinuxを入れたら動かない

    5,6年前のPCでLinuxを初めて入れたのですが、入れたLinuxはVine Linuxで、CPUがAMD Athron 1.2GHzで、メモリが512MBです。自宅サーバーとして運営したいと思っています。ダウンロードはi386でよろしいのでしょうか?Vine Linuxのi386をダウンロードすると、アプリケーションのタブをクリックしたあと5分ほどフリーズしたような状態になってまったく使い物になりません。早めに入れたいと思っているので助けてください。お願いします。

  • 小さなプログラムのメモリ消費量の測定方法

    自分で開発しているプログラムのメモリ消費量を測定したいと考えています。 このプログラムはC++言語で記述し、Linux環境でGCCを利用して開発しています。以前、プロセスのメモリ消費量を確認してみたところプログラムのメモリ消費量が少ないせいか、プロセスの最小メモリ消費のような値のまま大きな変化はありませんでした。 このようにメモリ消費量が小さなプログラムの測定を行なう方法を教えてください。

  • Linuxがフリーズ

    Debianでサーバを作ろうと思いIBMのThinkCenter A50(8320-A6J)を2台用意しました。そこでLinuxを最小の構成でインストールし、起動してしばらくすると必ずフリーズ2台します(2台とも同じです)。いくつかのディストリビューションを試したところ「Vine」ではフリーズしませんでした。なぜDebianでは不安定なのか原因を追及したいのですが、何から手をつけていいのかもわからない状態です、どうかアドバイスをお願いします。 ・PC メモリ:512MB HDD:250GB ・ディストリビューション Vine 4.2 :フリーズしない Debian 40R4a:起動後2日くらいで反応が遅くなる、「su -」したときにパスワードの入力を間違うとフリーズする、「top」コマンドでもフリーズ。 CentOS 5.2:1時間後にフリーズ

  • おすすめのLinuxはありますか?初心者ではない

    現在、「Ubuntu 12.10 32bit」を使っていますが、たまにフリーズします。 Linuxでプログラミングをやりたいと思っていますが、プログラミングに向いたLinuxがあれば教えていただきたいです。(おもにC++) (64ビット版がいいか32ビット版がいいかも教えてください。) <スペック> lenovo G570 CPU: Core i5 2.5GHz メモリ:4GB HDD: 500GB たまにフリーズする原因ってもしかして、OSが32bit版だからですか?(ChromeとPDFを見るソフトだけでしたが)

  • Linuxでのゲームプログラミングについて

    Googleなどの検索エンジンでLinuxでのゲームプログラムについてのサイトを調べてみたのですが、なかなかこれだというものにたどり着けずに困っています。WindowsでのゲームプログラミングではDxLibを用い、シューティングやアクション(未完成)ゲームを作ってみたのですが、そろそろ次の段階に行こうと思いはじめました。私は、各種サーバーを趣味で運営するに当たって、Linuxのすばらしさにほれ込んでしまいました。なので、Linuxでぜひゲームを作りたいと思っています。 とりあえず目的としてはチープな感じの3Dアクションゲームを作りたいと思っております。当方の環境は Fedora8 (Vineから乗り換え)です。 ・初歩的なCの知識があれば理解できるLinux上でのゲーム統合開発の説明がなされているサイト ・OpenGL,CでLinux上でゲーム開発 このような情報があるようなサイト。あるいは、その前にこれをやるべきだという意見があれば返答よろしくお願いいたします。

  • WindowsでのC と LinuxでのC の違いについて

    これから、Linux OSでC言語のプログラミングを行うことになりました。ディストリビューションはVine Linux 3.2 を利用します。 開発方法としては、Windows Xp 上でgccを利用できるIDE(Dev-C++ 4.9.9.2を利用します)で開発を行い(テスト的にコンパイル)、できたソースをLinux上でコンパイル・リンクするという方法で行おうと考えています。 そこで、疑問があります。 ANSIライブラリの中にはシステムコールを実行するものがあると思います。システムコールはOSの一部の機能ということですので、WindowsとLinuxとでは当然その機能は違ってくると思います。 つまり、WindowsでANSIライブラリを利用して実装したプログラム(コンパイルもとおる)がLinux上で正常に機能するのか(そもそもコンパイルがとおるか)がわかりません。 どなたかご教授いただけましたら幸いです。 宜しくお願いします。

  • Javaでメモリ不足を引き起こす方法

    Javaを使って、システムのメモリ不足を引き起こす方法を考えています。 (動作検証のためで、悪いことを考えているわけではありません^^;) 下記のプログラムでメモリを大量に消費するかなと思ったのですが、 Linux上のvmstatやtopなどで確認してもそれほど変化がありません。 while (true) { Integer[] ii = new Integer[100]; for (int i = 0; i < 100; i++) { ii[i] = new Integer(i); } } Javaの1プロセスが使えるメモリの上限があるので、メモリを食いつぶすプロセスを 大量に実行すれば良いと考えているのですが、メモリを食いつぶす方法が分かりません。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 情報のことを研究できる仕事はありますか?

    情報のことを研究できる仕事はありますか? 企業で、プログラミング言語や開発プロセスなど 情報に関することを研究する仕事は存在するのでしょうか。

  • VINE LINUX 3.2 インストールでフリーズ

    VINE LINUX3.2をftpからダウンロードしました。 そしてCDをB's recorderで作りました。 そして古いパソコンにインストールしようと思っているのですが そのパソコンはWindows98SEはインストールしていたのですが このたびVINE LINUX3.2をインストールしたいと思ってます。 CDからのブートに成功してインストールを実行しているのですが 残り8パッケージでインストールがとまってしまってフリーズしてしまいました。 完全版をインストールしようとしたのですが。 ためしにビデオカードを以外のカードを全部抜いてからインストールしましたがそれでも残り8パッケージでとまってしまいました CPUはK6-3 450HZ マザー AX59PRO メモリ 256MB ビデオカード voodoo banshee でインストールの時ビデオカード選択画面で 自動認識されます。 どうしてインストールの段階でとまってしまうのでしょうか。 パソコンが古いのでしょうか。 よろしくお願いします。

  • プロセス?ブロック?

    職場でC, C++で開発を行っているのですが、 最近、技術ミーティングなどで「プロセス」とか「プロセスをブロック」など の言葉を聞き、意味が良く分からず困っています。 OSのプロセススケジューリングによりブロックが起こるというような 基本的なことは分かっていますが、それをどのようにプログラミングで実装してよいのかが分かりません。 概要だけでしたらlinuxカーネルなどの基礎があればよいと思うのですが、 プログラミングで実践的にプロセスの扱い、プロセスとはこういうものだ!ということを学べる書物がありましたら教えてください。 具体的な書物でなくても、「マルチスレッドの本」というアドバイスでも結構です。 よろしくおねがいします。