CentOS 7 “yum yükleme” işlemi sırasında bellek ayıramıyor


11

Denemek yum install php56w-mcryptve sistem bana bu hatayı verdi

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

Kontrol ettim 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

Başka nerede kontrol edeceğinizden emin değilim.

DigitalOcean5 $ / ay planı olan 512MB RAM ile VPS kullanıyorum .

Yanıtlar:


8

Bu sorun, sunucuda sadece 490MB RAM var gibi görünüyor ve 421MB kullanılmış. Yalnızca 68MB boş bırakılıyor; bu herhangi bir sistemin çalışması için çok fazla bellek değildir.

Çıktıdan bakıldığında topMySQL'in (aka mysqld:) suçlu olduğunu gösterir.

Bu geçici bir durumsa yapabileceğiniz en iyi şey MySQL'i şu şekilde durdurmaktır:

sudo service mysqld stop

Ardından MySQL durduğunda yum installbeklendiği gibi çalışabilirsiniz .

Ancak başka bir çözüm , hizmette MySQL kullanımını ve yapılandırmasını değerlendirmek ve buna göre ayarlamak için “MySQL Tuning Primer” gibi bir komut dosyası kullanmak olacaktır . Nedeni kutunun dışında düz vanilya MySQL bir bellek domuz olacak. Ancak “MySQL Tuning Primer” kurulumunuzun değerlendirilmesine yardımcı olacak ve neleri ayarlayabileceğinizi size bildirecektir. Kurulumun sınırlı kaynaklarınızdan memnun olabilmesi için bellek gereksinimlerini azaltma dahil. Tek yakalama, MySQL'in “MySQL Tuning Primer” sonuçlarının her şeye değer olması için en az 48 saat boyunca aktif olarak çalışması gerekiyor. Bundan sonra, MySQL'in bu komut dosyasıyla performans ayarlaması, LAMP kurulumunuza ince ayar yapmanın harika bir yoludur.

Ek olarak, Apache çalıştırdığınız için muhtemelen Apache (aka httpd) için RAM gereksinimlerini düşürebilirsiniz, böylece bu şekilde daha fazla RAM boşaltabilirsiniz. Bu, Apache'nin temel bir geliştirme ortamı için oldukça genel bir tweaks setidir, ancak size yardımcı olmalıdır. Öncelikle Apache yapılandırmanızı en sevdiğiniz komut satırı düzenleyicisiyle açın; Tercih ederim nanoama herhangi bir metin editörü iyi:

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

Şimdi a satırını bulun Timeoutve bunu “120” olarak değiştirin; iki dakika makul bir zaman aşımı penceresidir:

Timeout 120

Benzer şekilde MaxKeepAliveRequestsbunu “24” olarak bulup değiştirin; “Canlı kal” bağlantıları iyidir, ancak ayarlarınızı boğmalarına izin vermeyin:

MaxKeepAliveRequests 24

Ve bunu bulun KeepAliveTimeoutve “2” olarak ayarlayın; bu, sitenizdeki bir sayfanın ne kadar hızlı yüklendiğini ve 2 saniyenin iyi bir ortalama olduğunu göstermelidir:

KeepAliveTimeout 2

Şimdi XML yapılandırma yönergesini şu şekilde ayarlayınız <IfModule mpm_prefork_module>:

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

Bunun anahtarı ServerLimitve MaxClients. Varsayılan olarak Apache'nin ayarları oldukça yüksektir; 255 MaxClientsinandığım için. Ama gerçekte yüksek bir trafik sitesi bile saniyede sadece 70-80 bağlantı alacak… Ve sonra ölün… Anlamı Apache bağlantıları durumsuzdur, bu yüzden kıyaslama saniyedeki bağlantılardır. Yani bir geliştirme veya küçük ölçekli sunucu için “40” iyi bir sayıdır.

Şimdi bu ayarlamalar yapıldığında Apache'yi şu şekilde yeniden başlatın:

sudo service httpd restart

MySQL ve Apache'yi varsayılan / hazır değerlerden daha makul ayarlara sahip olacak şekilde ayarlayarak sunucunuzdaki kaynakları serbest bırakabilir ve her şeyin daha sorunsuz çalışmasını sağlayabilirsiniz.


17

Takas dosyası oluşturabilirsiniz:

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

Bu takas dosyası oluşturacak ve uygulamaları yükleyebileceksiniz. Takas dosyasını kaldırmak için:

swapoff -a
rm -f /swapfile

ayrıntılar için bkz. Arch wiki .


1
İyi fikir. Takas özelliğini kapatmak için disk alanı kaybetmenin yanı sıra herhangi bir neden var mı?
raider33

Takas ayarlarına bağlı olarak, bir sistem% 50 bellek yükünde kullanmaya başlayabilir. Sisteminiz 512MB'ye sahipse, ancak çoğu zaman ~ 400MB kullanıyorsa, takas olmadan mükemmel şekilde çalışacaktır, ancak bununla birlikte 150MB'yi ileri geri değiştirmeye çalışarak yavaşlayabilir. Ama bu konuda yanlış olabilirim.
pbogut

sudoKomutlar için kullanmayı unutma
Raptor

1
fallocate hile ve işe yaramayabilir ... kullanınsudo dd if=/dev/zero of=/swapfile count=512 bs=1MiB
Ray Foss
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.