Điểm:4

Các tập lệnh PHP đột nhiên tải rất chậm trên Apache

lá cờ jp

Tôi đang kiểm tra tại sao đôi khi các tập lệnh PHP của tôi mất nhiều thời gian để tải qua mạng (>30 giây) trên máy chủ Apache 2.4 Ubuntu của tôi với PHP-FPM 7.4 bằng mpm_event. Máy chủ đã hoạt động bình thường trong vài tháng qua, điều này đã bắt đầu xảy ra vài ngày trước và tôi không thay đổi gì cả. Tôi đã khởi động lại, nó không giúp được gì.

tôi đã làm một cách đơn giản thử nghiệm.php. Đôi khi nó tải bình thường (<100ms), nhưng đôi khi tải mất 1 phút:

<?php echo "test\n"; ?>

nhập mô tả hình ảnh ở đây

  • CPU, RAM và IO của máy chủ đều bình thường (đã kiểm tra bằng htop).
  • Các tệp HTML tĩnh được tải mà không có bất kỳ độ trễ nào.
  • Chạy tập lệnh cục bộ thông qua bảng điều khiển SSH rất nhanh.
  • Nhật ký lỗi của Apache không hiển thị bất kỳ điều gì bất thường.
  • Tôi đã kiểm tra xem có một số cuộc tấn công DDOS hay không bằng cách kiểm tra số lượng IP được kết nối từ cùng một mạng con/16 và không tìm thấy điều gì lạ (ví dụ:> 100 kết nối).

Làm thế nào tôi có thể gỡ lỗi này hơn nữa để xem tại sao điều này lại xảy ra?


Một số đầu ra gỡ lỗi có thể giúp:

trạng thái dịch vụ sudo php7.4-fpm

nhập mô tả hình ảnh ở đây

Điểm:5
lá cờ fr

Có thể có một số lý do cho hành vi này:

  1. Nếu máy chủ web này xử lý các yêu cầu từ mạng bên ngoài, thì khi lưu lượng truy cập tăng lên, tải có thể tăng lên, dẫn đến thời gian phản hồi của máy chủ tăng lên.
  2. Nếu tập lệnh của bạn sử dụng lệnh gọi đến tài nguyên bên ngoài, thì trong trường hợp này, thời gian phản hồi của máy chủ có thể tăng lên do tốc độ phản hồi của tài nguyên bên ngoài thấp.

Thông báo tường trình:

[30-Sep-2021 03:36:46] CẢNH BÁO: Máy chủ [pool www] đã đạt đến cài đặt pm.max_children (5), hãy cân nhắc tăng cài đặt này

chỉ là bằng chứng của việc tăng tải.

Trong cả hai trường hợp, bạn nên xác định lý do tải bằng cách phân tích số lượng yêu cầu đối với tập lệnh và nếu có lệnh gọi đến tài nguyên bên ngoài, hãy đảm bảo rằng chúng hoạt động bình thường.

Điểm:4
lá cờ jp

Tôi nghĩ rằng tôi đã tìm ra giải pháp, nhưng nếu bạn có bất kỳ đề xuất nào, vui lòng cho tôi biết hoặc đăng câu trả lời khác.

Tôi đã kiểm tra /var/log/php7.4-fpm.log và thấy nhiều mục như thế này:

[30-Sep-2021 03:36:46] CẢNH BÁO: Đã truy cập máy chủ [pool www] cài đặt pm.max_children (5), hãy cân nhắc tăng cài đặt này

nhập mô tả hình ảnh ở đây

Vì vậy, tôi đưa lên các max_con đến 15 và có vẻ như nó có ích.

Điểm:1
lá cờ es

Như bạn có thể thấy trong đầu ra trạng thái của mình nhập mô tả hình ảnh ở đây bạn có một tác vụ đang chờ bắt đầu (5 tác vụ đang hoạt động, 0 tác vụ không hoạt động, 6 tác vụ). Như bạn đã đăng trong câu trả lời của riêng mình (và tôi rất vui vì nó đã hoạt động) việc tăng số lượng trẻ em được phép có thể là một giải pháp tốt - nhưng có rất nhiều điều liên quan đến việc tối ưu hóa php-fpm và chắc chắn nên suy nghĩ nhiều hơn về toàn bộ hệ thống trước khi thực hiện các thay đổi cấu hình này.

Một hướng dẫn vững chắc là đây.

Nhưng bất kể điều gì bạn nên biết khi sử dụng các giá trị tĩnh:
if (xử lý mức sử dụng bộ nhớ * max_children > RAM)
{ [sự cố apache] }

nếu (yêu cầu xử lý * start_servers > CPU)
{ [sự cố apache] }

Và lúc nào cũng biết phần cứng của bạn trước khi điều chỉnh các cài đặt này, đặc biệt là ở chế độ động/theo yêu cầu (theo thời gian, dễ mắc lỗi hơn).

Nếu bạn đang làm điều này cho bất kỳ loại máy chủ web kinh doanh quan trọng nào của nhiệm vụ, tôi muốn làm tròn rồi nhân đôi tất cả các ước tính. tức là quy trình lớn nhất có thể được gọi là sử dụng 178mb, vì vậy 200mb và máy ảo hiện tại của bạn trên [chèn nhà cung cấp dịch vụ lưu trữ/bản thân] chỉ có 1gb RAM - tôi đã đặt max_children thành 2 -- sau đó khi bạn nâng cấp máy ảo của mình (bạn sẽ làm gì với 1gb vào năm 2021??) và bạn có 8gb RAM trên máy chủ của mình, bạn có thể sử dụng max_children = 18 Lưu ý trong cả hai ví dụ, việc làm tròn có lợi cho các tài nguyên bổ sung và sau khi nhân đôi cho mục đích của fpm, để lại một đoạn bộ nhớ cho HĐH và các quy trình nền khác để sử dụng.

Tinh chỉnh các cài đặt này có thể vô cùng hữu ích và bất kỳ ai sử dụng apache đều nên biết cách - chỉ cần đảm bảo rằng phần cứng của bạn có thể xử lý cấu hình phần mềm mà bạn đã thiết lập.

lá cờ sa
Thực tế là nó mất cả phút khiến tôi nghĩ rằng các tác vụ khác khá chậm.
Điểm:0
lá cờ in

Chúng tôi đã có vấn đề gần như chính xác này vào năm ngoái.

Nuôi con tối đa sẽ chỉ bù đắp vấn đề cho một ngày sau đó.

Hóa ra đó là một cơ sở dữ liệu MySQL chậm được lưu trữ trên một máy chủ chuyên dụng trên mạng của chúng tôi dành cho một blog.

PHP của chúng tôi đã được định cấu hình để thử kết nối trong 30 giây và bất cứ khi nào cơ sở dữ liệu này quyết định hoạt động thì nó sẽ nhai 100 con PHP.

Chúng tôi đã hạ nó xuống 1 giây và sự cố đã biến mất. Tôi không nhớ liệu sự cố cơ sở dữ liệu có liên quan đến mạng hay chúng tôi phải tự tối ưu hóa cơ sở dữ liệu.

Bạn nên kiểm tra nhật ký truy cập Apache của mình trong khung thời gian 2:30-3:30 đó và tìm hiểu xem chúng có phải là các trang kết nối với cơ sở dữ liệu hay không. Kiểm tra nhật ký để tìm 500 lỗi dẫn đến sập máy chủ.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.