Tăng giới hạn bộ nhớ không giúp ích gì trong Lỗi nghiêm trọng: Kích thước bộ nhớ được phép của Lọ / mô-đun / lượt xem / lượt xem.module trên dòng 416


11

Tôi đã chuyển từ Drupal 7.14 sang 7.15 ba tuần trước và do đó, tôi gặp phải một loạt lỗi giới hạn bộ nhớ rất phức tạp (đối với tôi) . Những lỗi đó xảy ra bất cứ khi nào tôi đang cố gắng xóa bộ nhớ cache trong hiệu suất hoặc để chạy các tập lệnh cập nhật.

Công ty lưu trữ của tôi đã tăng giới hạn bộ nhớ của tôi trong php.ini lên tới 126 M, 256 M, 512 M và thậm chí 1024 M. Nhưng các lỗi vẫn xảy ra. Tôi đã di chuyển trang web của mình từ chia sẻ sang VPS, nhưng lỗi vẫn không thể xảy ra. Tôi không có cách nào và không biết làm thế nào để tiến về phía trước.

Dưới đây là các lỗi:

  • Lỗi nghiêm trọng: Kích thước bộ nhớ cho phép là 536870912 byte đã cạn kiệt (đã cố phân bổ 30 byte) trong /home/example/public_html/sites/all/modules/view/view.module trên dòng 420
  • Lỗi nghiêm trọng: Kích thước bộ nhớ cho phép hết 536870912 byte (đã cố phân bổ 108 byte) trong /home/example/public_html/includes/menu.inc trên dòng 2736

  • Lỗi nghiêm trọng: Kích thước bộ nhớ cho phép là 536870912 byte đã cạn kiệt (đã cố phân bổ 71 byte) trong /home/example/public_html/sites/all/modules/chain_menu_access/chain_menu_access.module trên dòng 59

  • cấp phát 64 byte) trong /home/example/public_html/sites/all/modules/view/includes/base.inc trên dòng 93


Lưu lượng truy cập cao nhất của bạn là gì (trang / giây). Ngoài ra, bao nhiêu dữ liệu (các nút?) Mà chế độ xem cố gắng tìm nạp lại?
cherouvim

thảo luận tương tự trên drupal.org drupal.org/node/76156
Anoop Joseph

2
Bạn có tình cờ có một chế độ xem trả về một số lượng lớn kết quả và đối với định dạng, nó tải nội dung thay vì các trường không? Tôi đã thấy hiệu suất cản trở này nhiều lần trước đây.
Jepedo

Chào các cậu! Cảm ơn rất nhiều cho câu trả lời của bạn. Tôi muốn nói rằng trang web này đang ở chế độ bảo trì và chỉ chứa một số lượng nội dung (nút) cho mục đích thử nghiệm. Trang web chỉ được truy cập bởi các trình thu thập thông tin Như tôi đã đề cập trong bài đăng của mình, giới hạn tăng bộ nhớ trong giải pháp php.ini được đề xuất trong nút drupal.org/node/76156 không giúp ích gì trong trường hợp của tôi. Đối với lượt xem nội dung tải thay vì trường. Tôi muốn tìm hiểu làm thế nào
salift

1
Bạn đã thử chuyển đổi trở lại Drupal 7.14 chưa? Nếu nâng cấp lên Drupal 7.15 gây ra vấn đề đó, vậy tại sao bạn không thử chuyển đổi lại? Linh cảm của tôi là có đệ quy vô hạn trong một trong các mô-đun của bạn. Các mô-đun liên quan đến Lượt xem của bạn là gì?
Johnathan Elmore

Câu trả lời:


13

Lần trước tôi cũng đập đầu vào tường trong khi gặp vấn đề về trí nhớ Drupal. Đây là kiến ​​thức thu thập của tôi về chủ đề này:

1. Lượt xem (có thể) sử dụng nhiều bộ nhớ

Tôi yêu tôi một số Chế độ xem (và Bảng và CTools và mọi thứ merlinofchaos chạm vào bằng ngón tay mạnh mẽ, dũng mãnh của anh ấy), nhưng có thể tạo cấu hình với nhiều mối quan hệ sử dụng nhiều bộ nhớ. Nếu bạn tắt Chế độ xem của mình và vấn đề bộ nhớ sẽ biến mất, đó có thể là Chế độ xem được xây dựng kém gây ra sự cố.

Phải làm gì nếu đó là Chế độ xem và bạn thực sự cần Chế độ xem đó để hoạt động? Hãy thử đặt mã vào (Thông qua Trình xuất hàng loạt hoặc Tính năng; xem bên dưới. Tôi đã mã hóa chức năng giống như Chế độ xem để cải thiện hiệu suất với rất ít thành công) để bắt đầu. Một suy nghĩ khác là làm lại Chế độ xem theo một cách khác - nếu cuối cùng, những gì bạn nhận được là các thuật ngữ phân loại, hãy đảm bảo loại Chế độ xem là Chế độ phân loại khi tạo; không tạo Chế độ xem nội dung sử dụng các mối quan hệ để đạt được các điều khoản phân loại.

Cũng có thể đáng nói ở đây là các bảng được cho là sử dụng rất nhiều bộ nhớ - tôi chưa thực sự đánh giá nó nên không thể xác nhận điều này.

2. Chuyển công cụ từ cơ sở dữ liệu vào mã là một thực tiễn rất tốt

Tôi phải mất một số trang web Drupal để nhận ra điều này, nhưng giữ tất cả mọi thứ được tạo thông qua giao diện người dùng trong cơ sở dữ liệu (đặc biệt là cấu hình Chế độ xem và Bảng) là một thực tiễn tồi tệ nhất của Drupal. Tại sao? Nó tăng tải trên cơ sở dữ liệu và không thể kiểm soát phiên bản. Điểm đầu tiên đặc biệt có vấn đề về việc sử dụng bộ nhớ - thay vì chỉ tải nội dung từ Chế độ xem từ cơ sở dữ liệu, trang web cũng phải tự tải các thành phần xem. Điều này trở nên trầm trọng hơn bởi cách Drupal sử dụng các bảng: bằng cách trừu tượng hóa mọi thứ đến mức thứ n, mỗi bit chức năng của Drupal sử dụng một bảng mới, dẫn đến một số yêu cầu nối các bảng bajillion lại với nhau. Điều này mang lại cho người khoa học máy tính thoát vị (caveat: link là ngớ ngẩn), nhưng thực sự không thể tránh được với một phần mềm có tính mô-đun và thân thiện với người dùng như Drupal.

Giải pháp? Sử dụng Trình xuất hàng loạt (Bao gồm CTools) hoặc Tính năng để đóng gói các bit mã hiện đang lưu trữ trong cơ sở dữ liệu dưới dạng mã mô-đun.

3. Chủ đề cũng có thể ăn bộ nhớ

Chủ đề của bạn có nhiều tệp mẫu (Tức là, tệp trong themename / samples /) không? Nếu vậy, bộ nhớ được tiêu thụ mỗi khi một trong những tệp đó được tải. Nếu bạn đang tạo các mẫu cụ thể để ngăn chặn các bit của Drupal được hiển thị, hãy thử:

  1. Thay đổi quyền để bit không hiển thị cho các vai trò người dùng không phải quản trị viên cụ thể.
  2. Sử dụng CSS để ẩn các phần tử.

Sự lựa chọn đầu tiên rõ ràng là những gì bạn muốn làm cho những thứ ảnh hưởng đến bảo mật - bạn không muốn sử dụng CSS để ẩn nút "chỉnh sửa" đối với một số người dùng nhất định, chỉ để họ bỏ qua nó thông qua Fireorms hoặc bất cứ điều gì.

4. Đừng quá nhiệt tình với các mô-đun đóng góp

Mặc dù đôi khi một trang web cần rất nhiều mô-đun đóng góp, đừng quá nhiệt tình. Mỗi mô-đun được bật (lưu ý: đã bật. Các mô-đun bị vô hiệu hóa không sử dụng bất kỳ bộ nhớ nào) sử dụng bộ nhớ. Điều này là một chút rõ ràng, nhưng đáng chú ý bất kể.

5. VPS là (đôi khi) là một lời nói dối

Theo kinh nghiệm của tôi, một số công ty lưu trữ vô đạo đức thích thử đẩy các trang web Drupal lên máy chủ VPS - chúng đắt hơn và nó giải phóng không gian lưu trữ được chia sẻ cho các trang web WordPress ngày càng nhiều hơn. Tình hình trở nên tồi tệ hơn khi các webhost thường không quảng cáo (Hoặc thậm chí sẵn sàng cho bạn biết nếu được hỏi) giới hạn bộ nhớ trên dành cho lưu trữ chia sẻ.

Than ôi, thường là nếu một trang web không có lưu lượng truy cập lớn và vẫn bị sập, vấn đề có thể liên quan đến cấu hình của Drupal hơn bất kỳ điều gì khác. Đẩy người dùng vào VPS chỉ làm vấy bẩn vùng biển và thêm nhiều biến để xử lý (Đây có phải là cấu hình máy chủ web không? Cấu hình PHP? Cấu hình máy khách VPS? Cấu hình máy chủ VPS, thậm chí?).

6. Khi thất bại, sao chép vào localhost và đánh nó bằng gậy

Đây là một lý do lớn tại sao mọi người sử dụng phương pháp sản xuất dev-staging với kiểm soát phiên bản - khi tất cả các lỗi khác, bạn có thể thực hiện kết xuất DB, git sao chép trang web vào một máy chủ thử nghiệm cục bộ và sau đó làm rối tung trang web trên máy chủ thử nghiệm mà không lo lắng về việc thực sự phá vỡ bất cứ điều gì trên máy chủ sản xuất.

Đối với các vấn đề về bộ nhớ, điều này thường có nghĩa là vô hiệu hóa từng mô-đun cho đến khi một nguyên nhân gây ra sự cố được phơi bày. Nó cũng có thể chỉ ra các vấn đề liên quan đến webhost - nếu trang web chạy hoàn toàn tốt trên cài đặt cục bộ với bộ nhớ được đặt ở mức hợp lý như 128MB, thì bạn biết webhost của bạn đang bị bẻ khóa.

tl; dr

Quan điểm của tôi là đó là chain_menu_access gây ra vấn đề. Hãy thử vô hiệu hóa nó và xóa bộ nhớ cache, xem nó có hoạt động không.

Tôi cũng sẽ thêm vào câu trả lời này khi tôi nghĩ về những thứ khác để thử ...


... Và đó chính xác là điều mà tôi hy vọng khi tôi đặt tiền thưởng cho câu hỏi này! Đặc biệt là 2. 110 đại diện cho bạn tốt thưa ngài :) Hy vọng điều này sẽ thu hút một số ý kiến ​​hữu ích từ những người khác với trải nghiệm hơi khác biệt
user56reinstatemonica8

ps Tôi đã nghe thấy ở nhiều nơi mà ngay cả các mô-đun bị vô hiệu hóa cũng sử dụng một lượng bộ nhớ nhất định để phân tích tệp. Tôi đã thấy mọi người nói rằng tất cả các tệp php / inc được phân tích cú pháp theo một cách nào đó, mặc dù điều đó có vẻ không đúng (nhiều khả năng chỉ là các tệp thông tin). Bất cứ ý tưởng nếu có bất kỳ sự thật trong này?
user56reinstatemonica8

Hay quá cảm ơn! Tôi khá chắc chắn rằng Drupal khá có trí nhớ khi tải các tệp - nếu bạn chạy XHProf, số lượng cuộc gọi sẽ file_scan_directorysử dụng đủ bộ nhớ như hiện tại. Tuy nhiên, tôi sẽ kiểm tra một số thứ với phát hiện này để xác nhận điều đó.
aendrew

Nếu các mô-đun bị vô hiệu hóa sử dụng bất kỳ bộ nhớ, nó khá không đáng kể. Tôi đã xem xét bao nhiêu bộ nhớ đã được báo cáo bởi Devel trước và sau khi xóa một mô-đun - trong khi làm mới trang sau khi xóa các tệp cho thấy một sự tăng đột biến nhỏ (<1MB), sau đó nó trở lại chính xác các giá trị xóa trước trong lần làm mới tiếp theo. Điều này khiến tôi tin rằng Drupal a. Quét thư mục mô-đun khi khởi động để xem có tệp .info mới b không. Thêm chi tiết của mô-đun vào systembảng c. Tải bất kỳ mô-đun nào với các mục nhập trường system.status được đặt thành 1. Nếu bất cứ ai có thể xác nhận hoặc từ chối điều này, tôi sẽ đánh giá cao nó.
aendrew

2

Bạn có thể thử đặt trình biên dịch PHP như trình biên dịch được tích hợp sẵn của XHProf hoặc Xdebug để kiểm tra những gì đang xảy ra trong yêu cầu.


Khi bạn tìm ra phần nào đặc biệt cần dung lượng bộ nhớ bạn đã thực hiện bước 1. Bước 2 là về việc thực sự cố gắng hiểu lý do tại sao nó sử dụng nhiều bộ nhớ đó và làm thế nào để giảm bộ nhớ. Ở trên mọi người nói về nhiều mục trong kết quả, vv Nói chung đó là một quá trình không thể mô tả đơn giản.
Daniel Wehner

1

Lượt xem là một con heo nhớ. Bộ nhớ đệm của Drupal có thể giúp đỡ. Drupal chỉ tải các mô-đun hoạt động tuy nhiên nếu chúng tạo bảng hoặc có các đối tượng khác có thể treo xung quanh. Chỉ gỡ cài đặt sẽ loại bỏ hầu hết các tạo tác. Chúng tôi sử dụng ủy quyền / quyền của drupal và viết các mô-đun của riêng mình trong. Không phải là tốt nhất nhưng hiệu suất là tốt hơn nhiều và dễ dàng để điều chỉnh. Chúng tôi cũng làm như vậy cho WP.


0

Trường hợp của tôi, vấn đề giới hạn bộ nhớ được tạo ra bởi hệ thống bộ đệm (các mô đun Boost và Boost Expire). Điều này cho tôi vấn đề để cập nhật mô-đun hoặc quan điểm. Khi đã tắt các mô-đun Boost, tất cả đều hoạt động tốt.

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.