Điểm:1

Công nhân Apache MPM bị mắc kẹt trong G (hoàn thiện một cách duyên dáng) ngày càng tăng - "bảng điểm đã đầy"

lá cờ us

Chạy công nhân MPM, Apache 2.4.46, Debian 9

Công nhân hoàn thiện một cách duyên dáng chỉ phát triển theo thời gian, họ dường như không bao giờ hoàn thành. Cuối cùng, tôi hết dung lượng và gặp lỗi "bảng điểm đã đầy". Nếu tôi khởi động lại apache, chúng sẽ được phát hành.

Tôi không tin nó có liên quan gì đến mã trang web (php) của tôi vì nhiều yêu cầu bị treo chỉ là hình ảnh NHẬN thuần túy, không liên quan đến php.

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

<IfModule mpm_worker_module>
ServerLimit 500
StartServers       10
MinSpareThreads    50
MaxSpareThreads    100
    ThreadLimit          64
    ThreadsPerChild      64
    MaxRequestWorkers     500
    MaxConnectionsPerChild   0
</IfModule>

bảng điểm nhập mô tả hình ảnh ở đây

ví dụ g công nhân nhập mô tả hình ảnh ở đây

apache trong tuần, các vị trí miễn phí đang giảm dần nhập mô tả hình ảnh ở đây

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

đã thử bật và tắt liên tục

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

lá cờ us
Tôi đang ở đâu bây giờ là tôi đã nhận ra PID bị kẹt G được hiển thị trong trạng thái apache thậm chí không chạy ?? > giết 21734 sh: 1: giết: Không có quá trình như vậy
Điểm:1
lá cờ jo

Khi bạn sử dụng MPM worker, các yêu cầu được xử lý bởi các luồng tồn tại trong các quy trình.

Từ https://httpd.Apache.org/docs/2.4/mod/worker.html

Một quy trình kiểm soát duy nhất (cha mẹ) chịu trách nhiệm khởi chạy các quy trình con. Mỗi quy trình con tạo một số luồng máy chủ cố định như được chỉ định trong chỉ thị ThreadsPerChild, cũng như một luồng trình nghe lắng nghe các kết nối và chuyển chúng đến một luồng máy chủ để xử lý khi chúng đến.

Trên Linux, một quy trình 'chứa' các luồng, đó là một PID có thể có nhiều luồng chia sẻ bộ nhớ (trong số các tài nguyên khác) với các luồng khác trong PID đó.

Trên thực tế, Linux thực sự chỉ quan tâm đến 'tác vụ', một quy trình không đa luồng là một PID với một bộ chứa một nhiệm vụ.

Khi bạn tải lại Apache một cách duyên dáng, bạn đang chấm dứt quá trình chứa. Điều đang xảy ra ở đây là Apache đang làm cho mỗi luồng đợi cho đến khi tất cả các luồng trong quy trình chứa hoàn tất trước khi khởi động lại vùng chứa PID.

Vì vậy, trong trường hợp của bạn, bạn có một chuỗi duy nhất chứa trong tất cả các quy trình trong danh sách đó vẫn đang bận hoặc bị kẹt bằng cách nào đó.

Bạn đã có một vài lựa chọn.

  1. Chỉ cần từ bỏ chờ đợi và khởi động lại.
  2. Tìm chuỗi sự cố (có thể là lỗi trong ứng dụng) và sửa nó.

1, thật dễ dàng. Thêm tùy chọn cấu hình Duyên dángTắt máyThời gian chờ với giá trị cao nhưng không ngu ngốc. Nói 900 giây. Theo mặc định, điều này là vô hạn, điều đó có nghĩa là các luồng của bạn sẽ đợi mãi cho đến khi luồng sự cố của bạn kết thúc.

Nhược điểm chính của điều này là bạn có cơ hội gặp phải một quy trình khi đang thực hiện một việc quan trọng nào đó - việc chấm dứt có thể làm hỏng một tệp hoặc phá vỡ ứng dụng một cách tinh vi. Bạn cũng có cơ hội (cực kỳ nhỏ) để chấm dứt khách hàng giữa chừng trong quá trình xử lý.

2, sẽ liên quan đến việc bạn phát hiện luồng bị mắc kẹt trong danh sách công nhân và sau đó chẩn đoán xem kết nối đang làm gì, nhưng bạn nhất định phải tìm ra lỗi thiết kế có thể là gì và bạn có thể giải thích hành vi đó một cách tự tin hơn trước khi thổi bay đi một chủ đề vấn đề.

lá cờ us
Trước tiên, cảm ơn vì câu trả lời của bạn, một số (đa tác vụ trên mỗi pid) những gì bạn nói có liên quan và có ý nghĩa và đã cho tôi một số manh mối nhưng những gì bạn nói về việc khởi động lại apache một cách duyên dáng, tôi không tin là có liên quan vì GracefulShutdownTimeout afaik chỉ liên quan đến hành vi của apache khi bạn khởi động lại. Tôi không khởi động lại, sự cố của tôi chỉ xảy ra theo thời gian, không khởi động lại. Mặc dù vậy, những gì tôi điều tra là tất cả các tác vụ có cùng một PID, có thể có một quy trình PHP trong danh sách đó đang bị treo.
lá cờ us
Vẫn xảy ra, tôi đã xem qua PID của mình và không có tác vụ PHP nào trong chuỗi G bị kẹt...vì vậy không chắc chuyện gì đang xảy ra, chỉ các yêu cầu nội dung/hình ảnh tĩnh không bao giờ thoát khỏi quá trình hoàn thiện một cách duyên dáng
lá cờ us
Vì vậy, tôi có ý tưởng rằng trạng thái máy chủ apache chỉ hiển thị các tệp tĩnh, không hiển thị hoạt động php-fpm, hóa ra là như vậy, vì vậy tôi đã thiết lập trạng thái php-fpm để tôi có thể xem nó đang làm gì, vì có vẻ như hầu hết có khả năng đó là thứ đang bị treo và tôi cũng đã thiết lập nhật ký chậm để bắt nó. https://Gist.github.com/Jiab77/a9428050ab9bb3f17c5e33343da94fd8
lá cờ us
Vì vậy, vẫn không may mắn, tôi đã thiết lập giám sát quy trình php và pid không có trong đó bị kẹt trong G và tôi nhận ra rằng tôi thậm chí không cần phải làm điều đó vì tôi có thể chỉ cần xem danh sách các quy trình đang chạy để tìm PID bị kẹt ! Vì vậy, có vẻ như pid không chạy nhưng apache nghĩ rằng nó chạy hoặc nó ở trạng thái nào đó khiến nó không hiển thị trong màn hình quy trình bình thường ???

Đă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.