いくつかの軽量サーバーアプリ(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パラメーターを減らすことを検討します。
その一部が「キャッシュ」によって消費されていることに気付くでしょう。
これは単にディスクの読み取り/書き込みがキャッシュされているだけであり、より重要な何かが必要になるとすぐにダンプされるため、基本的には空きと見なすことができます。
ディスク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ですが、実際には使用されていません)
最初の行は無視してください。重要な番号は「-/ + buffers/cache」行にあります。 Linuxは、プロセスに道を譲るためにキャッシュとバッファーをクリアします。
私のDebianサーバーは、最初の行に2〜10メガバイトの空き容量を定期的に示しています。 2行目は、50メガバイトの空き容量があることを示しています。 (システム上で合計256 RAM)
あなたの番号はうまく見えます。バッファ/キャッシュをクリアしないでください。十分な空きRAMがあります。
これで、キャッシュ用の空きメモリがない場合、システムの実行速度が低下します。大量のスワップを使い始めると、Webページの提供に問題が発生します。
スワップピネスを変更する必要があります(カーネルにスワップする量を通知します)
# sysctl -w vm.swappiness=0
0に設定すると、VMはできるだけ多くのデータをメモリに保持するように指示されますが、自分に合ったものを確認する必要があります。わかりにくいですが、実験を行ってください。そして、あなたが思いつくことができるものを見てください。
/etc/sysctl.confのvm.swappiness行を編集して、起動時に設定します
つまり、メモリを可能な限り使用し、ディスクで発生するスワッピングの量を減らしたいということです。
Apacheの代わりにlighttpdを使用してください-これはメモリリークを解決しませんが、RAMを節約するのに役立ちます。また、top/htopを使用してリークを実行しているプロセスを特定し、さらにデバッグする必要があります。これが発生する理由は1000あります。調査する必要があります。
それがいっぱいになるまで常にスワップに割り込む場合は、おそらく問題があります。スワップでの使用が少なく、物理メモリがいっぱいである限り、問題ありません。物理的なRAMをすべて使い切ってほしいのですが、それが目的です。
答えは、RAMを何が消費しているかによって異なります。 24時間間隔で実行される2つのps aux
の出力を比較して、問題の絞り込みを開始します。
また、LinuxはI/Oをキャッシュするためにメモリを多用することに注意してください。これらのキャッシュは、別のプロセスがそのスペースを要求するとすぐに解放されるため、パフォーマンスに悪影響を与えることはありません。つまり、free
の出力の2行目(-/+ buffers/cache
)が重要な行です。
Apache構成のMaxClients設定は何ですか?私のSlicehost VMは、私が箱に持っているRAMの量で、私を正気の何かに落とすまで、同じことをしました。
それはちょっとしたプラグですが、うまくいけばリソースを節約するのに良いものです;)
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>/proc/sys/vm/drop_caches
キャッシュも解放すると思います。キャッシュを完全に削除するはずですが、数日後には現在の場所に戻ります。ただし、cronすることはできます。