CentOS 7 tidak dapat mengalokasikan memori selama operasi "yum install"

11

Coba yum install php56w-mcryptdan sistem memberi saya kesalahan ini

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

Saya menjalankan cek 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

Tidak yakin ke mana lagi harus memeriksa.

Saya menggunakan DigitalOceanVPS dengan RAM 512MB, paket $ 5 / bulan.

Muhaimin
sumber

Jawaban:

8

Masalah ini adalah server sepertinya hanya memiliki 490MB RAM pada mesin dan Anda memiliki 421MB yang digunakan. Hanya menyisakan 68MB gratis; itu tidak banyak memori untuk sistem apa pun untuk bekerja dengan.

Melihat output dari topmenunjukkan bahwa MySQL (alias:) mysqldadalah biang keladinya.

Hal terbaik yang dapat Anda lakukan jika ini adalah situasi sementara adalah cukup hentikan MySQL seperti ini:

sudo service mysqld stop

Kemudian dengan MySQL berhenti, Anda dapat menjalankan yum installseperti yang diharapkan.

Tetapi solusi lain adalah dengan menggunakan skrip seperti "MySQL Tuning Primer" untuk membantu menilai penggunaan dan konfigurasi MySQL pada penyajian dan menyesuaikannya. Alasannya adalah MySQL vanilla biasa dari kotak akan menjadi babi memori. Tetapi "MySQL Tuning Primer" akan membantu menilai pemasangan Anda dan memberi tahu Anda apa yang dapat Anda ubah. Termasuk menurunkan persyaratan memori sehingga pengaturan bisa menyenangkan dengan sumber daya Anda yang terbatas. Satu-satunya hal yang perlu diperhatikan adalah MySQL harus aktif berjalan setidaknya selama 48 jam terus menerus agar hasil "MySQL Tuning Primer" bernilai apa pun. Selain itu, penyetelan kinerja MySQL dengan skrip ini merupakan cara terbaik untuk menyempurnakan pengaturan LAMP Anda.

Selain itu, karena Anda menjalankan Apache Anda mungkin dapat menurunkan persyaratan RAM untuk Apache (alias httpd) sehingga Anda membebaskan lebih banyak RAM dengan cara itu. Ini adalah set tweak yang cukup umum untuk lingkungan pengembangan dasar Apache, tetapi akan membantu Anda. Pertama buka konfigurasi Apache Anda melalui editor baris perintah favorit Anda seperti ini; Saya lebih suka nanotetapi editor teks apa pun baik:

sudo nano /etc/httpd/conf/httpd.conf 

Sekarang temukan baris yang mengatakan Timeoutdan ubahlah menjadi "120"; dua menit adalah jendela batas waktu yang wajar:

Timeout 120

Demikian pula temukan MaxKeepAliveRequestsdan ubah itu menjadi "24"; Koneksi "tetap hidup" bagus, tetapi jangan biarkan membanjiri pengaturan Anda:

MaxKeepAliveRequests 24

Dan temukan KeepAliveTimeoutdan atur itu menjadi "2"; ini harus berkorelasi dengan seberapa cepat satu halaman di situs Anda memuat dan 2 detik adalah rata-rata yang baik:

KeepAliveTimeout 2

Sekarang cari direktif konfigurasi config XML sebagai <IfModule mpm_prefork_module>:

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

Kunci untuk ini adalah ServerLimitdan MaxClients. Secara default, pengaturan Apache cukup tinggi; 255 karena MaxClientssaya percaya. Tetapi kenyataannya bahkan situs dengan traffic tinggi hanya akan mendapatkan 70-80 koneksi per detik ... Dan kemudian mati ... Artinya koneksi Apache tidak stateless sehingga tolok ukurnya adalah koneksi per detik. Jadi untuk server pengembangan atau skala kecil, "40" adalah angka yang bagus.

Sekarang dengan penyesuaian kunci yang dibuat, mulai ulang Apache seperti ini:

sudo service httpd restart

Dengan menyesuaikan MySQL dan Apache untuk memiliki pengaturan yang lebih masuk akal daripada nilai standar / kalengan dapat membebaskan sumber daya di server Anda dan membuat semuanya berjalan lebih lancar.

JakeGould
sumber
17

Anda dapat membuat file swap:

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

Ini akan membuat file swap dan Anda akan dapat menginstal aplikasi. Untuk menghapus file swap:

swapoff -a
rm -f /swapfile

lihat Arch wiki untuk detailnya.

pbogut
sumber
1
Ide bagus. Apa alasannya, selain kehilangan ruang disk, untuk mematikan swap?
raider33
Bergantung pada pengaturan swap, sistem dapat mulai menggunakannya pada beban memori 50% atau lebih. Jika sistem Anda mengalami, katakanlah, 512MB tetapi sebagian besar waktu menggunakan ~ 400MB maka itu akan berfungsi dengan baik tanpa swap, tetapi dengan itu, dapat memperlambat mencoba untuk bertukar 150MB bolak-balik. Tapi saya mungkin salah dalam hal itu.
pbogut
Jangan lupa gunakan sudountuk perintah
Raptor
1
fallocate mungkin curang dan tidak berfungsi ... gunakansudo dd if=/dev/zero of=/swapfile count=512 bs=1MiB
Ray Foss