CentOS 7 không thể phân bổ bộ nhớ trong quá trình cài đặt trên máy y tế


11

Cố gắng yum install php56w-mcryptvà hệ thống đã cho tôi lỗi này

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

Tôi đã kiểm tra 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

Không chắc chắn nơi khác để kiểm tra.

Tôi đang sử dụng DigitalOceanVPS với RAM 512MB, gói 5 đô la / tháng.

Câu trả lời:


8

Vấn đề này là máy chủ dường như chỉ có 490 MB RAM trên máy và bạn đã sử dụng 421 MB. Chỉ để lại 68 MB miễn phí; đó không phải là nhiều bộ nhớ cho bất kỳ hệ thống nào để làm việc.

Nhìn vào đầu ra từ topcho thấy MySQL (aka mysqld:) là thủ phạm.

Điều tốt nhất bạn có thể làm nếu đây là một tình huống tạm thời là chỉ cần dừng MySQL như thế này:

sudo service mysqld stop

Sau đó, với MySQL đã dừng, bạn có thể chạy yum installnhư mong đợi.

Nhưng một giải pháp khác là sử dụng một tập lệnh như là MySQL MySQL Điều chỉnh Primer để giúp đánh giá việc sử dụng và cấu hình của MySQL trên bản phân phối và điều chỉnh cho phù hợp. Lý do là vanilla MySQL đơn giản ra khỏi hộp sẽ là một con heo nhớ. Tuy nhiên, MySQL MySQL Prim Primer sẽ giúp đánh giá cài đặt của bạn và cho bạn biết những gì bạn có thể điều chỉnh. Bao gồm giảm yêu cầu bộ nhớ để thiết lập có thể hài lòng với tài nguyên giới hạn của bạn. Điều hấp dẫn duy nhất là MySQL cần phải tích cực chạy trong ít nhất 48 giờ liên tục để các kết quả của MySQL MySQL Tune Primer có giá trị bất cứ điều gì. Trước đó, hiệu suất điều chỉnh MySQL với tập lệnh này là một cách tuyệt vời để tinh chỉnh thiết lập LAMP của bạn.

Ngoài ra, vì bạn đang chạy Apache, bạn có thể giảm các yêu cầu RAM cho Apache (hay còn gọi là httpdvậy) để bạn giải phóng thêm RAM theo cách đó. Đây là một bộ chỉnh sửa khá chung cho môi trường phát triển cơ bản của Apache, nhưng sẽ giúp bạn. Trước tiên hãy mở cấu hình Apache của bạn thông qua trình soạn thảo dòng lệnh yêu thích của bạn như thế này; Tôi thích nanonhưng bất kỳ trình soạn thảo văn bản là tốt:

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

Bây giờ hãy tìm dòng mà a nói Timeoutvà thay đổi thành dòng 120 120; hai phút là một cửa sổ thời gian chờ hợp lý:

Timeout 120

Tương tự tìm MaxKeepAliveRequestsvà thay đổi điều đó thành 95 Các kết nối của mạng sống vẫn tốt, nhưng đừng để chúng lấn át thiết lập của bạn:

MaxKeepAliveRequests 24

Và tìm KeepAliveTimeoutvà cài đặt nó thành 1 2 điều này sẽ tương quan với tốc độ một trang trên trang web của bạn và 2 giây là mức trung bình tốt:

KeepAliveTimeout 2

Bây giờ hãy tìm chỉ thị cấu hình XML là <IfModule mpm_prefork_module>:

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

Chìa khóa cho việc này là ServerLimitMaxClients. Theo mặc định, cài đặt của Apache khá cao; 255 cho MaxClientstôi tin. Nhưng thực tế là một trang web có lưu lượng truy cập cao sẽ chỉ nhận được 70-80 kết nối mỗi giây. Sau đó, chết có nghĩa là các kết nối Apache không trạng thái nên điểm chuẩn là kết nối mỗi giây. Vì vậy, đối với một máy chủ phát triển hoặc quy mô nhỏ, thì 40 40 là một con số tốt.

Bây giờ với những điều chỉnh chính được thực hiện, hãy khởi động lại Apache như thế này:

sudo service httpd restart

Bằng cách điều chỉnh MySQL và Apache để có các cài đặt hợp lý hơn các giá trị mặc định / đóng hộp có thể giải phóng tài nguyên trên máy chủ của bạn và giúp mọi thứ chạy trơn tru hơn.


17

Bạn có thể tạo tập tin trao đổi:

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

Điều này sẽ tạo tập tin trao đổi và bạn sẽ có thể cài đặt các ứng dụng. Để xóa tệp hoán đổi:

swapoff -a
rm -f /swapfile

xem Arch wiki để biết chi tiết.


1
Ý kiến ​​hay. Bất kỳ lý do, ngoài việc mất một số không gian đĩa, để tắt trao đổi?
raider33

Phụ thuộc vào cài đặt trao đổi, một hệ thống có thể bắt đầu sử dụng nó khi tải bộ nhớ 50% hoặc hơn. Nếu hệ thống của bạn đang có, giả sử, 512MB nhưng hầu hết thời gian sử dụng ~ 400 MB thì nó sẽ hoạt động hoàn toàn tốt mà không cần trao đổi, nhưng với nó, nó có thể làm chậm việc cố gắng trao đổi 150 MB qua lại. Nhưng tôi có thể sai về điều đó.
pbogut

Đừng quên sử dụng sudocho các lệnh
Raptor

1
ngụy biện có thể gian lận và không hoạt động ... sử dụngsudo dd if=/dev/zero of=/swapfile count=512 bs=1MiB
Ray Foss
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.