web-dev-qa-db-ja.com

Ubuntu 8.04サーバーのメモリ(RAM)を解放する

いくつかの軽量サーバーアプリ(Apache22、svnserve、mysql、およびproftpd)を備えたSlicehost仮想サーバーでUbuntu8.04を実行します。唯一の深刻なサービス制限はRAM-256MBが私が支払っているものです。

システムを数日/週実行すると、空き容量RAMがゆっくりと減少し、すぐにページングファイルが使用されていることに気付きました。たとえば、再起動すると、 RAM無料、翌日は55%など)の60%。

             total       used       free     shared    buffers     cached
Mem:           256        114        141          0          3         50
-/+ buffers/cache:         61        194
Swap:          511          0        511

使用可能なメモリの量が減少するのを防ぐにはどうすればよいですか?

編集:これが私のps -aux上位のメモリ消費者を一覧表示します。私はすべてのシステムプロセスを省略しました。 Apacheとmysqlがメモリ使用量を上回っていることがわかります。

    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root      1369  0.0  0.3  16844   952 ?        S<s  00:10   0:00 /sbin/udevd --daemon
    syslog    2110  0.0  0.2  12288   748 ?        Ss   00:10   0:00 /sbin/syslogd -u syslog
    root      2131  0.0  0.2   8128   588 ?        S    00:10   0:00 /bin/dd bs 1 if /proc/kmsg of /var/run/klogd/kmsg
    klog      2133  0.0  0.4   4516  1304 ?        Ss   00:10   0:00 /sbin/klogd -P /var/run/klogd/kmsg
    root      2154  0.0  0.4  50904  1152 ?        Ss   00:10   0:00 /usr/sbin/sshd
    root      2211  0.0  0.2   3932   592 ?        S    00:10   0:00 /bin/sh /usr/bin/mysqld_safe
    mysql     2253  0.0  8.8 161940 23252 ?        Sl   00:10   0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mys
    root      2254  0.0  0.2   3836   604 ?        S    00:10   0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
    proftpd   2340  0.0  0.5  63000  1504 ?        Ss   00:10   0:00 proftpd: (accepting connections)
    root      2356  0.0  0.3  18608   964 ?        Ss   00:10   0:00 /usr/sbin/cron
    root      2384  0.0  0.3  83360   892 ?        Ss   00:10   0:00 svnserve -d -r /etc/svn/svn-rep-01
    root      2387  0.0  3.5 194628  9220 ?        Ss   00:10   0:00 /usr/sbin/Apache2 -k start
    root      2409  0.0  0.2   3852   576 tty1     Ss+  00:10   0:00 /sbin/getty 38400 tty1
    root      2410  0.0  0.5  15252  1444 ?        Sl   00:10   0:00 /usr/lib/Ruby/gems/1.8/gems/passenger-2.0.2/ext/Apache2/ApplicationPoolServerExecutable 0 /us
    www-data  2411  0.0  3.4 195880  9100 ?        S    00:10   0:00 /usr/sbin/Apache2 -k start
    www-data  2412  0.0  7.3 205532 19400 ?        S    00:10   0:00 /usr/sbin/Apache2 -k start
    www-data  2413  0.0  3.3 195620  8824 ?        S    00:10   0:00 /usr/sbin/Apache2 -k start
    www-data  2414  0.0  3.4 195880  9080 ?        S    00:10   0:00 /usr/sbin/Apache2 -k start
    www-data  2415  0.0  3.4 195888  9056 ?        S    00:10   0:00 /usr/sbin/Apache2 -k start
    root      2416  0.0  2.4  43448  6512 ?        Sl   00:10   0:00 Passenger spawn server
    www-data  2437  0.0  7.7 208116 20248 ?        S    00:48   0:00 /usr/sbin/Apache2 -k start
    www-data  2519  0.0  3.3 195644  8820 ?        S    02:12   0:00 /usr/sbin/Apache2 -k start
    root      3026  0.0  1.1  67960  2892 ?        Ss   20:53   0:00 sshd: dv [priv]
    dv        3028  0.0  0.6  67960  1700 ?        S    20:53   0:00 sshd: dv@pts/0
    dv        3029  0.1  0.8  19392  2304 pts/0    Ss   20:53   0:00 -bash
    dv        3041  0.0  0.4  15056  1092 pts/0    R+   20:54   0:00 ps -aux

全体として、皆さんの思慮深い回答に感謝したいと思います。それぞれに役立つ情報が含まれているため、最良のものを選択するのは非常に困難でした。

Lighthttpdまたはnginxに移行するか、少なくともApacheのMaxClientsパラメーターを減らすことを検討します。

9
DV

その一部が「キャッシュ」によって消費されていることに気付くでしょう。

これは単にディスクの読み取り/書き込みがキャッシュされているだけであり、より重要な何かが必要になるとすぐにダンプされるため、基本的には空きと見なすことができます。

ディスクIO高速になります。:)

現在、ボックスに2Gのディスクキャッシュがあり、処理が高速になっています。

「無料」は貧弱なメモリ分析ツールです。 「htop」は、メモリ使用量の実用的な表現とプロセスを探索するための実用的な方法の両方を提供する、はるかに実用的なシステム管理ツール全体であることがわかりました。

このように、もっときれいに:

 1 [||||| 5.0%]タスク:合計156、実行中2 
 2 [||| 2.5%]負荷平均:0.29 0.30 0.31 
 Mem [|||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||| 1182/3976MB]稼働時間:5日、16:25:36 
 Swp [|| 37/2000MB] 
 Mem:3967M使用:1182Mバッファ:0Mキャッシュ:1952M 

(稼働時間が短いことを知りたい場合は、ラップトップです)

多くの人が、スワップからデータを取り出すためにキャッシュを無効にする方法を提供するかもしれませんが、多かれ少なかれ無意味です。 本当にメモリを大量に消費するであるが、集中的に実行されていないときはスワップアウトされるように、数日ごとに集中的に実行されるプログラムがない限り、最終的にはパフォーマンスが低下するだけです。それはオンになります、あなたはそれをディスクからメモリにスワップバックするのにかかる〜.5秒待つことができません。

個人的には、これらの条件に合う良いプログラムは考えられません。 肩をすくめる

カーネルを書いた人々は、彼らがこの部門で何をしているのかを多かれ少なかれ知っています。あなたが特定のあなたがよく知っているのでない限り、私は彼らの判断を信頼します。

@Paul Bettsが言ったように、lighttpdに切り替えると、少し節約できるかもしれません。何をしているかにもよりますが、常にいくつかのトレードオフがあります。

私は自分のvpsでそれを使用しています。 96MのRAMと63Mのスワップのみがあり、それぞれ26M(ジョークなし)と35Mのみを使用しています。また、そこで実行されているデータベースもあります。 (Postgresですが、実際には使用されていません)

12
Kent Fredric

最初の行は無視してください。重要な番号は「-/ + buffers/cache」行にあります。 Linuxは、プロセスに道を譲るためにキャッシュとバッファーをクリアします。

私のDebianサーバーは、最初の行に2〜10メガバイトの空き容量を定期的に示しています。 2行目は、50メガバイトの空き容量があることを示しています。 (システム上で合計256 RAM)

あなたの番号はうまく見えます。バッファ/キャッシュをクリアしないでください。十分な空きRAMがあります。

これで、キャッシュ用の空きメモリがない場合、システムの実行速度が低下します。大量のスワップを使い始めると、Webページの提供に問題が発生します。

3
epochwolf

スワップピネスを変更する必要があります(カーネルにスワップする量を通知します)

# sysctl -w vm.swappiness=0

0に設定すると、VMはできるだけ多くのデータをメモリに保持するように指示されますが、自分に合ったものを確認する必要があります。わかりにくいですが、実験を行ってください。そして、あなたが思いつくことができるものを見てください。

/etc/sysctl.confのvm.swappiness行を編集して、起動時に設定します

つまり、メモリを可能な限り使用し、ディスクで発生するスワッピングの量を減らしたいということです。

2
Inetpub

Apacheの代わりにlighttpdを使用してください-これはメモリリークを解決しませんが、RAMを節約するのに役立ちます。また、top/htopを使用してリークを実行しているプロセスを特定し、さらにデバッグする必要があります。これが発生する理由は1000あります。調査する必要があります。

1
Ana Betts

それがいっぱいになるまで常にスワップに割り込む場合は、おそらく問題があります。スワップでの使用が少なく、物理メモリがいっぱいである限り、問題ありません。物理的なRAMをすべて使い切ってほしいのですが、それが目的です。

1
neouser99

答えは、RAMを何が消費しているかによって異なります。 24時間間隔で実行される2つのps auxの出力を比較して、問題の絞り込みを開始します。

また、LinuxはI/Oをキャッシュするためにメモリを多用することに注意してください。これらのキャッシュは、別のプロセスがそのスペースを要求するとすぐに解放されるため、パフォーマンスに悪影響を与えることはありません。つまり、freeの出力の2行目(-/+ buffers/cache)が重要な行です。

1
skymt

Apache構成のMaxClients設定は何ですか?私のSlicehost VMは、私が箱に持っているRAMの量で、私を正気の何かに落とすまで、同じことをしました。

1
ceejayoz

それはちょっとしたプラグですが、うまくいけばリソースを節約するのに良いものです;)

Nginx(Apacheよりも優れている)Webサーバー-VPS BIBLE Pt 11

..これはSlicehostと同様のセットアップであるLinodeでテストされています..しかし、それらは360MB RAM、同じ月額$ 20(および追加の6 gBスペース)を提供します。 DV、あなたの計画にお金を払うでしょう。

ページの全シリーズ索引にリンクされているVPS聖書の別の部分は、Xcacheを構成する方法を説明しています。

それ以外の場合は、再起動せずにswappinessで遊ぶことができます。これは、サーバーにとって非常に重要です。-

Sudo sysctl vm.swappiness = 10

必要に応じて、「10」を任意の値に変更するだけです。別の値でコマンドを再入力してください。最終的に再起動すると、値はデフォルトになります。

1
the_guv

次を使用できます。

エコー1>/proc/sys/vm/drop_caches

キャッシュも解放すると思います。キャッシュを完全に削除するはずですが、数日後には現在の場所に戻ります。ただし、cronすることはできます。

0
f4nt