web-dev-qa-db-ja.com

CentOS 7は、「yum install」操作中にメモリを割り当てることができません

yum install php56w-mcryptを試してみると、システムからこのエラーが表示されました

libmcrypt-2.5.8-13.el7.x86_64: [Errno 5] [Errno 12] Cannot allocate memory
php56w-mcrypt-5.6.5-1.w7.x86_64: [Errno 5] [Errno 12] Cannot allocate memory

free -mをチェックしました

             total       used       free     shared    buffers     cached
Mem:           490        421         68          8          3         42
-/+ buffers/cache:        376        113
Swap:            0          0          0

top

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 9756 mysql     20   0  727588  81556      0 S  0.3 16.2   1:04.61 mysqld
11089 root      20   0       0      0      0 S  0.3  0.0   0:16.25 kworker/0:2
    1 root      20   0  129396   2020    576 S  0.0  0.4   0:05.88 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.16 ksoftirqd/0
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
    9 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/0
   10 root      20   0       0      0      0 S  0.0  0.0   0:01.82 rcu_sched
   11 root      20   0       0      0      0 R  0.0  0.0   0:02.10 rcuos/0
   12 root      rt   0       0      0      0 S  0.0  0.0   0:00.91 watchdog/0
   13 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 khelper
   14 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs
   15 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback
   17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd

他に確認する場所がわからない。

DigitalOcean VPSをRAM 512MB、月額5ドルのプランで使用しています。

11
Muhaimin

この問題は、サーバー上でRAM)が490MBしかないと思われ、421MBが使用されています。空き容量は68MBしかありません。これは、どのシステムでも使用できるメモリではありません。

topの出力を見ると、MySQL(別名:mysqld)が原因であることがわかります。

これが一時的な状況である場合にできる最善のことは、次のようにMySQLを単に停止することです。

Sudo service mysqld stop

その後、MySQLを停止すると、期待どおりにyum installを実行できます。

しかし、別の解決策は “ MySQL Tuning Primer” のようなスクリプトを使用して、MySQLの使用とサーブ上の設定を評価し、それに応じて調整することです。理由は単純なバニラMySQLがそのままの状態であるからです。しかし、「MySQL Tuning Primer」は、インストールを評価し、調整できることを通知するのに役立ちます。限られたリソースでセットアップが満足できるように、メモリ要件を下げることを含みます。唯一の問題は、MySQLが「MySQL Tuning Primer」の結果を価値のあるものにするために、少なくとも48時間連続してアクティブに実行する必要があることです。それ以降は、このスクリプトを使用してMySQLをパフォーマンスチューニングすることは、LAを微調整するための優れた方法です。セットアップ。

さらに、Apacheを実行しているので、おそらくRAM Apacheの要件(別名httpd)を下げることができるため、より多くのRAMこれは、Apacheの基本的な開発環境向けのかなり一般的な微調整のセットですが、役立つはずです。まず、このようなお気に入りのコマンドラインエディターを使用してApache構成を開きます。私は nano しかし、任意のテキストエディタが適切です。

Sudo nano /etc/httpd/conf/httpd.conf 

AがTimeoutと言っている行を見つけて、「120」に変更します。 2分は妥当なタイムアウトウィンドウです。

Timeout 120

同様に、MaxKeepAliveRequestsを見つけて「24」に変更します。 「キープアライブ」接続は適切ですが、設定を圧倒させないでください。

MaxKeepAliveRequests 24

そしてKeepAliveTimeoutを見つけて「2」に設定します。これは、サイトの1ページの読み込み速度と相関しているはずであり、2秒が平均です。

KeepAliveTimeout 2

次に、<IfModule mpm_prefork_module>として設定されたXML構成ディレクティブを探します。

<IfModule mpm_prefork_module>
  StartServers           8
  MinSpareServers       16
  MaxSpareServers       32
  ServerLimit           40
  MaxClients            40
  MaxRequestsPerChild 2000
</IfModule>

これの鍵はServerLimitMaxClientsです。デフォルトでは、Apacheの設定はかなり高いです。 MaxClientsは255だと思います。しかし現実には、トラフィックの多いサイトでも1秒あたり70〜80の接続しか得られない…そして死ぬ…Apacheの接続はステートレスであるため、ベンチマークは1秒あたりの接続数です。したがって、開発サーバーまたは小規模サーバーの場合、「40」が適切な数です。

これらの重要な調整が完了したら、次のようにApacheを再起動します。

Sudo service httpd restart

MySQLとApacheを調整してデフォルト/既定値よりも適切な設定にすることで、サーバー上のリソースを解放し、すべてをよりスムーズに実行できます。

8
JakeGould

スワップファイルを作成できます。

fallocate -l 512M /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

これにより、スワップファイルが作成され、アプリケーションをインストールできるようになります。スワップファイルを削除するには:

swapoff -a
rm -f /swapfile

詳細は Arch wiki を参照してください。

17
pbogut