Điểm:0

Điều gì có thể gây ra các yêu cầu bị chặn trong IIS?

lá cờ gl

Tôi đang sử dụng IIS trên Windows Server 2016 với MySQL và PHP trên hai máy chủ gần như giống hệt nhau. Gần đây, tôi đã nhận thấy một trong hai máy chủ của mình bị chậm lại nhưng điều đó chỉ xảy ra khi trang web của tôi cố gắng thực thi nhiều phiên bản của một tập lệnh cùng một lúc. Họ dường như bị mắc kẹt vào nhau.

Một ví dụ hoàn hảo là trang tìm kiếm của tôi. Khi người dùng nhập truy vấn tìm kiếm, với mỗi lần nhập phím (sau chữ cái thứ hai), một tìm kiếm được thực hiện miễn là có độ trễ ít nhất 200 mili giây kể từ lần nhấn phím cuối cùng. Vì vậy, nếu bạn gõ nhanh, nó chỉ thực hiện một tìm kiếm ở cuối nhưng đối với những người gõ chậm hơn (những người đợi hơn 200 mili giây giữa các lần nhấn phím), điều này sẽ kích hoạt nhiều cuộc gọi đến kết quả tìm kiếm. Xem ảnh chụp màn hình này.

MÁY CHỦ XẤU nhập mô tả hình ảnh ở đây

Lưu ý tất cả các yêu cầu đang chờ xử lý và trong ảnh chụp màn hình này, yêu cầu đầu tiên vừa hoàn thành sau 19,08 giây. Rõ ràng là quá lâu. Vào thời điểm họ hoàn thành tất cả, họ sẽ mất hơn 15 giây để trả về một tập kết quả đơn giản.

MÁY CHỦ XẤU nhập mô tả hình ảnh ở đây

Hãy nhớ rằng các truy vấn này chỉ mất một phần giây khi chạy trong MySQL Workbench và cả khi chạy trên máy chủ khác của tôi không gặp sự cố này. Xem trong ảnh chụp màn hình này (từ máy chủ tốt), cùng một tìm kiếm trả về sau một phần tư giây.

MÁY CHỦ TỐT nhập mô tả hình ảnh ở đây

Đối với tôi, có vẻ như (trên máy chủ xấu) vì một số lý do, chúng không thể thực hiện đồng thời vì nếu tôi chỉ thực hiện một tìm kiếm (bằng cách nhập đủ nhanh để chỉ kích hoạt một tìm kiếm) thì nó sẽ quay lại nhanh, nhưng nếu tôi thực hiện bội số như thế này, tất cả đều bị kẹt như tắc đường. Điều gì có thể gây ra điều này?

Ảnh chụp màn hình tiếp theo này hiển thị kết quả nếu tôi chỉ kích hoạt một tìm kiếm duy nhất trên máy chủ xấu. Như bạn có thể thấy nó trở lại siêu nhanh. Vì vậy, vấn đề chỉ xảy ra khi thực thi đồng thời nhiều tập lệnh giống nhau.

MÁY CHỦ XẤU nhập mô tả hình ảnh ở đây

Gần đây, tôi đã thực hiện một số thay đổi đối với máy chủ bị lỗi nhưng theo những gì tôi có thể nhớ, thay đổi duy nhất tôi đã thực hiện là cho phép tải lên tệp lớn hơn.

  • Trong PHP tôi đã tăng post_max_size = 500M
  • Trong PHP tôi đã tăng upload_max_filesize = 500M
  • Trong IIS, tôi đã tăng UploadReadAheadSize lên 49152000
  • Trong IIS, tôi đã tăng độ dài nội dung tối đa được phép lên 300000000

Có thể tôi đã thực hiện các thay đổi khác đối với máy chủ này mà tôi không thể nhớ được.

KHẮC PHỤC TẠM THỜI

Tôi có thể giảm thiểu vấn đề này bằng cách cho phép độ trễ lâu hơn giữa các lần nhấn phím khi tìm kiếm và tôi đã làm được điều này, tăng nó lên 800 mili giây để ngay cả những người gõ chậm cũng không thấy vấn đề này, nhưng đây chỉ là một giải pháp hỗ trợ ban nhạc và không giải quyết vấn đề tiềm ẩn cũng ảnh hưởng đến các khu vực khác trên trang web của tôi.

NHỮNG GÌ TÔI ĐÃ THỬ

Cho đến nay tôi đã xác nhận rằng cấu hình IIS, cấu hình MySQL (my.ini) và cấu hình PHP (php.ini) của tôi đều giống nhau theo mọi cách quan trọng trên cả hai máy chủ (ít nhất là theo những gì tôi thấy rõ ràng) . Tôi cũng đã xác nhận rằng các câu lệnh chọn mà tôi đang chạy trong tìm kiếm này hoạt động tốt như nhau trên cả hai máy chủ nếu tôi thực thi chúng trong MySQL Workbench. Chỉ trong ứng dụng web của tôi, nơi tôi gặp sự cố này.

Tôi tạm thời hủy bỏ hai thay đổi mà tôi đã thực hiện đối với IIS để tải lên tệp lớn hơn đề phòng, nhưng điều đó dường như không tạo ra sự khác biệt nào.

Tôi cũng đã tải xuống và cài đặt LeanSentry, nó cảnh báo tôi một hoặc hai lần mỗi ngày rằng trang web của tôi đã thấy các yêu cầu bị chặn, mà tôi cho rằng đó chính xác là những gì tôi đang thấy ở đây, nhưng thật không may, LeanSentry chỉ có thể xác định nguồn gốc của vấn đề với ASP trang, không phải PHP. Vì vậy, về cơ bản, nó chỉ xác nhận với tôi rằng có vấn đề nhưng nó không thể giúp tôi vượt qua điều đó.

CÁC TRIỆU CHỨNG KHÁC

Tôi gặp các sự cố tương tự nếu tôi mở đồng thời nhiều báo cáo. Nếu tôi cho phép một báo cáo tải xong trước khi mở báo cáo tiếp theo thì tất cả chúng đều tải nhanh, nhưng nếu tôi buộc ứng dụng của mình mở nhiều báo cáo cùng một lúc, thì tất cả chúng đều bị kẹt.

Điều gì có thể gây ra vấn đề thắt cổ chai này?

Wilson Hauck avatar
lá cờ jp
Đăng từ máy chủ NHANH và CHẬM, Yêu cầu thông tin bổ sung. Kích thước RAM, # lõi, mọi thiết bị SSD hoặc NVME trên máy chủ MySQL? Đăng trên pastebin.com và chia sẻ các liên kết. Từ thư mục gốc đăng nhập SSH của bạn, Kết quả văn bản của: B) HIỂN THỊ TRẠNG THÁI TOÀN CẦU; sau tối thiểu 24 giờ C) HIỂN THỊ BIẾN TOÀN CẦU; D) HIỂN THỊ ĐẦY ĐỦ QUY TRÌNH; E) TÌNH TRẠNG; không HIỂN THỊ TÌNH TRẠNG, chỉ TÌNH TRẠNG; F) hoàn thành báo cáo www.MySQLTuner.pl (perl) hoặc tương tự. G) HIỂN THỊ TÌNH TRẠNG INNODB ĐỘNG CƠ; để phân tích điều chỉnh khối lượng công việc của máy chủ nhằm đưa ra đề xuất.
Wilson Hauck avatar
lá cờ jp
Động cơ FEDERATED có liên quan không?
lá cờ gl
@WilsonHauck Không, không phải trong trường hợp này. Tôi thực sự đã chuyển hoàn toàn khỏi các bảng liên kết. Như bạn đã biết, họ đã gây ra quá nhiều vấn đề. :-)
Wilson Hauck avatar
lá cờ jp
Tuyệt quá. Chúc cuối tuần vui vẻ.
Điểm:0
lá cờ gl

Hóa ra kết xuất HTML đã gây ra tình trạng treo máy. Khi kết quả tìm kiếm của tôi dài, trình duyệt sẽ mất nhiều thời gian để hiển thị tất cả HTML và trong khi thực hiện điều đó, trình duyệt không thể xử lý yêu cầu tiếp theo.

Tôi đã giải quyết vấn đề bằng cách giới hạn kết quả tìm kiếm ở 50 hàng để giờ đây HTML hiển thị gần như ngay lập tức và yêu cầu tiếp theo có thể thực thi. Vì vậy, không phải IIS chặn yêu cầu mà là trình duyệt.

Điểm:0
lá cờ us

Tôi nghĩ không phải máy chủ IIS của nó có vấn đề ở đây, mọi thứ bạn đang tìm kiếm đều yêu cầu một cuộc gọi mới trong mã của bạn và nó trông giống như thứ gì đó bên trong tập lệnh PHP của bạn, nó mất nhiều thời gian.

Mỗi khi bạn gửi một yêu cầu mới, bạn chỉ cần chặn một phiên bản PHP mới và khi PHP sắp hết phiên bản, nó sẽ bị sập.

Thật khó để biết bạn đang làm gì bên trong tệp PHP tìm kiếm của mình, nhưng tôi nghĩ bạn đang gọi đến một số máy chủ SQL hoặc thứ gì đó để tìm kiếm. Bạn có thể thử nhận xét truy vấn tìm kiếm bên trong mã và thực hiện kiểm tra tương tự không?

Ngay bây giờ tôi chỉ đoán những gì tốt nhất có thể, có vẻ như bạn đang sử dụng như một biểu thức chính quy hoặc một hàm tương tự trong cơ sở dữ liệu SQL của mình và khi bạn có nhiều hàng thì thực hiện cuộc gọi cực kỳ chậm, đó là lý do tại sao nó bị treo rất nhiều.

Nhưng một lần nữa tôi chỉ đoán muộn nên tôi biết kết quả của bài kiểm tra mà tôi bảo bạn làm.

lá cờ gl
Tôi sẽ thử nhận xét một số mã để xem liệu tôi có thể tách nó ra thêm một chút hay không, nhưng như tôi đã nói trong OP của mình, bản thân các cuộc gọi được chọn sẽ nhanh nếu tôi chạy chúng trong MySQL Workbench hoặc nếu tôi chỉ chạy một tìm kiếm.

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