CentOS 7 ไม่สามารถจัดสรรหน่วยความจำได้ในระหว่างการดำเนินการ“ yum install”


11

ลอง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

ไม่แน่ใจว่าจะตรวจสอบที่ไหนดี

ฉันใช้DigitalOceanVPS กับ RAM 512MB แผน $ 5 / เดือน

คำตอบ:


8

ปัญหานี้เป็นเซิร์ฟเวอร์ที่ดูเหมือนจะมี RAM 490MB เท่านั้นในเครื่องและคุณใช้ 421MB ปล่อยฟรีเพียง 68MB; นั่นไม่ใช่หน่วยความจำจำนวนมากสำหรับระบบใด ๆ ที่จะทำงานกับ

ดูผลลัพธ์จากการtopแสดงว่า MySQL (aka:) mysqldเป็นตัวการ

สิ่งที่ดีที่สุดที่คุณสามารถทำได้ถ้านี่เป็นสถานการณ์ชั่วคราวคือหยุด MySQL อย่างนี้:

sudo service mysqld stop

จากนั้นเมื่อ MySQL หยุดทำงานคุณสามารถทำงานได้yum installตามที่คาดไว้

แต่วิธีแก้ปัญหาอื่นก็คือการใช้สคริปต์เช่น"MySQL Tuning Primer"เพื่อช่วยประเมินการใช้งาน MySQL และการกำหนดค่าบนบริการและปรับตามความเหมาะสม เหตุผลที่เป็นธรรมดา vanilla MySQL ออกจากกล่องจะหมูหน่วยความจำ แต่“ MySQL Tuning Primer” จะช่วยประเมินการติดตั้งของคุณและแจ้งให้คุณทราบว่าคุณสามารถปรับแต่งอะไรได้บ้าง รวมถึงการลดความต้องการของหน่วยความจำลงเพื่อให้การตั้งค่ามีความสุขกับทรัพยากรที่ จำกัด ของคุณ สิ่งที่จับได้เพียงอย่างเดียวคือ MySQL ต้องทำงานอย่างน้อย 48 ชั่วโมงเพื่อผลลัพธ์ "MySQL Tuning Primer" จะคุ้มค่ามาก ที่ผ่านมาการปรับแต่งประสิทธิภาพ MySQL ด้วยสคริปต์นี้เป็นวิธีที่ยอดเยี่ยมในการปรับแต่งการตั้งค่า LAMP ของคุณ

นอกจากนี้เนื่องจากคุณใช้งาน Apache คุณสามารถลดความต้องการ RAM สำหรับ Apache (aka httpd) เพื่อให้คุณเพิ่ม RAM ได้มากขึ้น นี่เป็นชุด tweaks ทั่วไปที่ค่อนข้างยุติธรรมสำหรับสภาพแวดล้อมการพัฒนาพื้นฐานของ Apache แต่ควรช่วยคุณ ก่อนอื่นให้เปิดการกำหนดค่า Apache ของคุณผ่านเครื่องมือแก้ไขบรรทัดคำสั่งที่คุณชื่นชอบดังนี้ ฉันชอบnanoแต่โปรแกรมแก้ไขข้อความใด ๆ ที่ดี:

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

ตอนนี้หาบรรทัดที่ a พูดTimeoutและเปลี่ยนเป็น "120"; สองนาทีเป็นหน้าต่างหมดเวลาที่เหมาะสม:

Timeout 120

ค้นหาMaxKeepAliveRequestsและเปลี่ยนแปลงสิ่งนั้นในลักษณะเดียวกันกับ "24" การเชื่อมต่อ“ รักษาการมีชีวิตอยู่” นั้นดี แต่อย่าปล่อยให้การตั้งค่าของคุณครอบงำ:

MaxKeepAliveRequests 24

และค้นหาKeepAliveTimeoutและตั้งค่าเป็น "2"; สิ่งนี้ควรมีความสัมพันธ์กับความเร็วในการโหลดหนึ่งหน้าในเว็บไซต์ของคุณและ 2 วินาทีนั้นเป็นค่าเฉลี่ยที่ดี:

KeepAliveTimeout 2

ตอนนี้ค้นหาชุดคำสั่ง XML config เป็น<IfModule mpm_prefork_module>:

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

กุญแจสำคัญในการนี้อยู่และServerLimit MaxClientsตามค่าเริ่มต้นของ Apache การตั้งค่าค่อนข้างสูง 255 เพราะMaxClientsฉันเชื่อ แต่ความจริงก็คือแม้แต่เว็บไซต์ที่มีปริมาณการใช้งานสูงจะได้รับการเชื่อมต่อ 70-80 ต่อวินาทีเท่านั้น ... จากนั้นก็ตาย ... ความหมายของการเชื่อมต่อ Apache นั้นไร้สัญชาติดังนั้นมาตรฐานคือการเชื่อมต่อต่อวินาที ดังนั้นสำหรับการพัฒนาหรือเซิร์ฟเวอร์ขนาดเล็ก“ 40” เป็นจำนวนที่ดี

ตอนนี้ด้วยการปรับเปลี่ยนคีย์เหล่านั้นให้เริ่ม Apache ใหม่ดังนี้:

sudo service httpd restart

ด้วยการปรับ MySQL และ Apache ให้มีการตั้งค่าที่สมเหตุสมผลมากกว่าค่าเริ่มต้น / ค่ากระป๋องสามารถเพิ่มทรัพยากรบนเซิร์ฟเวอร์ของคุณและทำให้ทุกอย่างทำงานได้ราบรื่นขึ้น


17

คุณสามารถสร้างไฟล์ swap:

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

สิ่งนี้จะสร้างไฟล์สลับและคุณจะสามารถติดตั้งแอปพลิเคชันได้ ในการลบไฟล์ swap ให้ทำดังนี้

swapoff -a
rm -f /swapfile

ดูArch wikiสำหรับรายละเอียด


1
ความคิดดี. มีเหตุผลอะไรนอกเหนือจากการสูญเสียพื้นที่ดิสก์เพื่อปิดการสลับ?
raider33

ขึ้นอยู่กับการตั้งค่าการสลับระบบสามารถเริ่มใช้งานได้กับโหลดหน่วยความจำ 50% หรือมากกว่านั้น หากระบบของคุณมีอยู่สมมติว่า 512MB แต่โดยส่วนใหญ่จะใช้ ~ 400MB แล้วมันจะทำงานได้อย่างสมบูรณ์แบบโดยไม่ต้องสลับ แต่ถ้าใช้มันจะช้าลงหากพยายามสลับ 150MB กลับไปกลับมา แต่ฉันอาจจะผิดที่หนึ่ง
pbogut

อย่าลืมที่จะใช้sudoสำหรับคำสั่ง
Raptor

1
fallocate อาจโกงและไม่ทำงาน ... ใช้งานsudo dd if=/dev/zero of=/swapfile count=512 bs=1MiB
เรย์ฟอสส์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.