Tại sao thời gian đáp ứng bùng nổ khi tần số yêu cầu giảm?


22

Sửa : thời gian đáp ứng ( %D) là mss không ms! 1

Điều này không thay đổi bất cứ điều gì về sự kỳ lạ của mẫu này nhưng điều đó có nghĩa là nó thực tế ít bị tàn phá hơn.


Tại sao thời gian đáp ứng tương quan nghịch với tần số yêu cầu?

Không phải máy chủ sẽ phản hồi nhanh hơn khi nó ít phải xử lý các yêu cầu xử lý?

Có gợi ý nào để làm cho Apache "tận dụng" tải ít hơn không?

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

Mô hình này là định kỳ. Điều đó có nghĩa là nó sẽ hiển thị nếu số lần hiển thị giảm xuống dưới khoảng 200 yêu cầu mỗi phút - điều này xảy ra (do hoạt động của người dùng tự nhiên) từ tối muộn đến sáng sớm.


Các yêu cầu là các POST rất đơn giản gửi JSON dưới 1000 ký tự - JSON này được lưu trữ (được thêm vào tệp văn bản) - đó là nó. Câu trả lời chỉ là "-".

Dữ liệu được hiển thị trong các biểu đồ được ghi lại bằng chính Apache:

LogFormat "%{%Y-%m-%d+%H:%M:%S}t %k %D %I %O" performance
CustomLog "/var/log/apache2/performance.log" performance

2
Có thể là một cái gì đó đang gây ra áp lực bộ đệm, và kết quả là nó phải tải lại mọi thứ từ đĩa? Hoạt động của đĩa trông như thế nào?
TLW

2
Là yêu cầu này đến mỗi phút hoặc yêu cầu xử lý mỗi phút?
dùng253751

Phần mềm nào bạn đã sử dụng để ghi lại và vẽ dữ liệu này? Thực sự tò mò
Délisson Junio

1
@wingleader: được ghi bằng Apache2 và được vẽ với R
Raffael

@immibis: xem cấu hình nhật ký mà tôi đã thêm - Tôi nghĩ đó là "đến"
Raffael

Câu trả lời:


31

Đây là hành vi phổ biến trong các trung tâm dữ liệu. Thời gian phản hồi của bạn chậm tương ứng với thời gian thường được gọi là Cửa sổ hàng loạt. Đây là khoảng thời gian mà hoạt động của người dùng dự kiến ​​sẽ thấp và các quy trình hàng loạt có thể được chạy. Sao lưu cũng được thực hiện trong giai đoạn này. Các hoạt động này có thể làm căng tài nguyên của máy chủ và mạng gây ra các vấn đề về hiệu suất như bạn thấy.

Có một số tài nguyên có thể gây ra sự cố:

  • Tải CPU cao. Điều này có thể gây ra apache để chờ một lát thời gian để xử lý yêu cầu.
  • Sử dụng bộ nhớ cao. Điều này có thể xóa bộ đệm cho phép apache phục vụ tài nguyên mà không cần đọc chúng từ đĩa. Nó cũng có thể gây ra phân trang / hoán đổi công nhân apache.
  • Hoạt động đĩa cao. Điều này có thể khiến hoạt động I / O của đĩa được xếp hàng với độ trễ tương ứng trong việc phục vụ nội dung.
  • Hoạt động mạng cao. Điều này có thể khiến các gói được xếp hàng để truyền, tăng thử lại và làm giảm dịch vụ.

Tôi sử dụng sarđể điều tra ban hành như thế này. atsarcó thể được sử dụng thu thập sardữ liệu vào các tệp dữ liệu hàng ngày. Chúng có thể được kiểm tra để xem hành vi của hệ thống như thế nào vào ban ngày khi hiệu suất hoạt động bình thường và quá mức khi hiệu suất thay đổi.

Nếu bạn đang theo dõi hệ thống với muninhoặc một số hệ thống khác tập hợp và sử dụng tài nguyên đồ thị, bạn có thể tìm thấy một số chỉ số ở đó. Tôi vẫn thấy sarchính xác hơn.

Có những công cụ như niceionicecó thể được áp dụng cho các quy trình hàng loạt để giảm thiểu tác động của chúng. Chúng chỉ hiệu quả đối với các vấn đề CPU hoặc I / O. Họ không thể giải quyết các vấn đề với hoạt động Bộ nhớ hoặc Mạng.

Di chuyển hoạt động sao lưu sang một mạng riêng và giảm tranh chấp mạng. Một số phần mềm sao lưu có thể được cấu hình để giới hạn băng thông sẽ được sử dụng. Điều này có thể giải quyết tranh chấp mạng.

Tùy thuộc vào cách các quy trình hàng loạt được kích hoạt, bạn có thể giới hạn số lượng quy trình hàng loạt chạy song song. Điều này thực sự có thể cải thiện hiệu suất của các quy trình hàng loạt vì chúng có thể gặp phải sự tranh chấp tài nguyên tương tự.


1
Một liên kết đến sarcó thể hữu ích. Tôi đã tìm thấy cái này: en.wikipedia.org/wiki/Sar_(Unix)
Roger Lipscombe

đây không chỉ là bản sao lưu, các nhà cung cấp vm có thể chuyển nhiều vm hơn đến cùng các máy trong thời gian ngừng hoạt động và tắt một vài giá đỡ để tiết kiệm năng lượng (hoặc thực sự, dành chúng cho các nhiệm vụ hàng loạt)
Jens Timmerman

8

Mối quan hệ này có thể xảy ra theo hướng khác nếu người gửi yêu cầu đợi yêu cầu trước đó hoàn thành trước khi gửi yêu cầu mới. Trong trường hợp đó, lưu lượng truy cập giảm khi thời gian yêu cầu tăng (vì bất kỳ lý do gì), do hàng đợi phía máy khách.

Hoặc nó có thể là một thành phần của phép đo của bạn - nếu biểu đồ trên hiển thị các yêu cầu đã hoàn thành , trái với yêu cầu đến , tỷ lệ sẽ giảm khi thời gian xử lý yêu cầu tăng (giả sử công suất hữu hạn: D).


Tất nhiên đây chỉ là sự trầy xước bề mặt của những lý do có thể, nhưng tuyên bố vấn đề mở đầu không mang lại nhiều điều cần xem xét. Liệu quá trình này nói chuyện với bất cứ điều gì khác? Những loại yêu cầu nào nó phục vụ? Khối lượng công việc thay đổi theo thời gian? Và cứ thế ....
Karol Nowak

quan điểm thú vị nhưng không phù hợp với tính chu kỳ và thời gian của các triệu chứng
Raffael

7

Mặc dù câu trả lời của @ BillThor thể đúng, nhưng dường như khoảng thời gian tải thấp hoàn toàn được xử lý bởi các quy trình sao lưu (nghĩa là các khoảng thời gian khớp chính xác).

Một lời giải thích khác chỉ đơn giản là lưu trữ. Nếu một tập lệnh / cơ sở dữ liệu cụ thể / bất cứ thứ gì không được sử dụng gần đây, dữ liệu được lưu trong bộ nhớ cache có liên quan có thể đã bị hủy để giải phóng bộ nhớ cho phần còn lại của hệ điều hành. Đây có thể là các chỉ mục trên cơ sở dữ liệu hoặc bộ đệm O / S liên quan đến một tệp hoặc bất cứ thứ gì tương tự. Một truy vấn sau đó sẽ phải khôi phục thông tin này nếu nó đã được một lúc kể từ truy vấn cuối cùng. Trong thời gian bận rộn, điều này sẽ không xảy ra vì truy vấn cuối cùng sẽ xảy ra thường xuyên. Điều này cũng sẽ giải thích tại sao bạn thấy thời gian phản hồi thấp thời gian phản hồi cao trong thời gian bận rộn.


Đặc biệt là nếu bộ nhớ đệm truy vấn và / hoặc bộ nhớ đệm truy cập đĩa có liên quan. Như một bên nếu có bất kỳ chiến lược "tái sử dụng chủ đề" nào cũng giúp.
mckenzm

Không có đọc bất kỳ loại liên quan.
Raffael

1
@Raffael Tôi rất nghi ngờ bạn có thể đảm bảo "không có bất kỳ loại đọc nào liên quan". Ở mức độ tầm thường, giả sử các trang của Apache được phân trang vì có thứ gì khác muốn RAM? Giả sử MPM của bạn cho Apache đã giảm số lượng luồng / tiến trình trong khi mọi thứ không hoạt động và có quá trình tạo ra các luồng mới? Bạn có nghiêm túc nói rằng nếu bạn chạy stracetrên quy trình Apache, bạn sẽ thấy không có read()cuộc gọi hệ thống nào tương tự không? Điều đó sẽ khá bất thường.
abligh

@ableigh: tốt, chính xác, "dịch vụ" của tôi không thực hiện rõ ràng bất cứ điều gì đọc từ đĩa
Raffael

@Raffael nếu bạn muốn kiểm tra hiệu ứng của bộ nhớ đệm hệ điều hành (chỉ), thì trong khoảng thời gian bận rộn, hãy thực hiện echo 3 > /proc/sys/vm/drop_cachescứ sau 5 giây trong một phút và xem bạn có nhận được hiệu ứng tương tự về thời gian phản hồi hay không.
abligh

2

Những gì bạn đang thấy ở đó, đối với tôi, giống như nó có thể là một vấn đề thống kê. Có thể không, câu trả lời của @ BillThor có thể đúng, nhưng tôi sẽ đăng nó cho đầy đủ.

Các đồ thị thời gian đáp ứng được dựa trên phần trăm. Nhóm mẫu gồm 800-1000 yêu cầu là số lượng mẫu tốt cho việc này, nhóm 50-100 yêu cầu có thể không quá nhiều.

Nếu bạn cho rằng số lượng yêu cầu chậm không phải là hàm tuyến tính của khối lượng yêu cầu, thì việc tăng cường độ yêu cầu không dẫn đến thứ tự tăng cường độ trong các yêu cầu chậm, thì khối lượng yêu cầu cao hơn sẽ dẫn đến thời gian yêu cầu trung bình thấp hơn.


1
nếu quan sát chỉ bao gồm từ 50 đến 100 yêu cầu thì thực sự điều này có thể chỉ là ngẫu nhiên nhưng nếu nhìn vào biểu đồ bạn sẽ thấy rằng chúng ta đang nói về 60 x 5 thử nghiệm, mỗi thí nghiệm liên quan đến khoảng 50 đến 100 yêu cầu - điều đó chắc chắn là đủ loại trừ ngẫu nhiên. Ngoài ra, nếu bạn nhìn kỹ, bạn sẽ thấy phần trăm thứ 50 ổn định trung bình xuất hiện ở khoảng 2500ms.
Raffael

Không nhất thiết, đó không hoàn toàn là cách các loại thống kê này hoạt động đồng loạt. Ví dụ: 1000 yêu cầu trong hơn 1 giờ và 1000 yêu cầu trong hơn 1 phút sẽ không hoạt động giống nhau. Cũng có thể không xảy ra ở đây. Kích thước mẫu nhỏ hoạt động kỳ lạ, trong trường hợp này giống như bộ mẫu 60x5. Các mô hình có thể là kết quả của tải phi tuyến tính.
Kaithar

0

Có những lời nói dối, lời nói dối lớn và số liệu thống kê.

Giả thuyết của tôi: bạn đã có ba loại yêu cầu riêng biệt:

  1. Luồng biến thông thường chứa phần lớn các yêu cầu và tất cả các yêu cầu này đều được hoàn thành trong vòng 200-300.
  2. Luồng nhỏ với tốc độ không đổi khoảng 20 yêu cầu mỗi phút (ngay cả vào ban đêm). Mỗi mất khoảng 2.500 ss để hoàn thành.
  3. Luồng nhỏ với tốc độ không đổi khoảng 10 yêu cầu mỗi phút (ngay cả vào ban đêm). Mỗi cái cũng mất trên 4.000 ss.

Vào ban đêm, 50 yêu cầu mỗi phút tương ứng là 20 + 20 + 10. Và do đó, kết quả của phần trăm 50% hiện phụ thuộc rất nhiều vào kết quả của luồng 2. Và 95% phần trăm phụ thuộc vào luồng 3, do đó, nó thậm chí không bao giờ có thể hiển thị trên biểu đồ.

Trong ngày, các luồng 2 + 3 được ẩn rất tốt trên tỷ lệ phần trăm 95%.


Bạn có ý nghĩa gì với stream? Các yêu cầu hoàn toàn đồng nhất trong khi các khách hàng yêu cầu hoàn toàn không đồng nhất.
Raffael

0

Càng nhìn nó, tôi càng có xu hướng nghĩ rằng có vấn đề với việc thu thập dữ liệu.

Trước hết, có một cái gì đó thực sự kỳ lạ đang xảy ra với TPS của bạn. Trong khi mô hình tổng thể trông bình thường, có một sự phá vỡ rất sắc nét xảy ra vào khoảng 9 giờ tối, và sau đó một lần nữa vào khoảng 7 giờ sáng. Một biểu đồ bình thường sẽ mượt mà hơn nhiều trong quá trình chuyển đổi sang giờ thấp điểm.

Điều đó cho thấy rằng có một sự thay đổi trong hồ sơ và bạn có thể có 2 loại khách hàng riêng biệt:

  1. Một hoạt động chỉ trong khoảng từ 7 giờ sáng (ish) đến 9 giờ tối (ish), với khối lượng lớn và
  2. một cái khác có thể hoạt động suốt ngày đêm, với âm lượng thấp hơn.

Gợi ý thứ hai là khoảng 18:00. Phần lớn thời gian trước và sau, chúng tôi có cao hồ sơ khối lượng - TPS cao và độ trễ thấp. Nhưng vào khoảng 18:00, có sự sụt giảm đột ngột từ 800-1000 RPM xuống dưới 400 RPM. Điều gì có thể gây ra điều đó?

Gợi ý thứ ba là bước xuống trong thời gian đáp ứng 5 phần trăm. Tôi thực sự thích xem xét thời gian phản hồi tối thiểu (nhưng phân vị thứ 5 có thể tốt hơn) vì hai lý do: Nó cho tôi biết thời gian phục vụ (tức là thời gian phản hồi trừ hàng đợi) và thời gian phản hồi có xu hướng tuân theo phân phối Weibull có nghĩa là chế độ (hoặc giá trị phổ biến nhất) chỉ ở trên mức tối thiểu.

Vì vậy, bước xuống trong phân vị thứ 5 nói với tôi rằng có một sự đột ngột trong chuỗi và thời gian phục vụ đã thực sự giảm xuống mặc dù cả phương sai và thời gian phản hồi trung bình đều tăng lên rất nhiều.

Bước tiếp theo

Ở giai đoạn này, tôi sẽ đi sâu vào nhật ký để tìm hiểu sự khác biệt của các mẫu có khối lượng thấp 18:00 so với các mẫu có khối lượng cao trước và sau nó.

Tôi sẽ tìm kiếm:

  • sự khác biệt về vị trí địa lý (trong trường hợp độ trễ ảnh hưởng đến $ request_time)
  • sự khác biệt trong URL (không nên có)
  • sự khác biệt trong phương thức HTTP (POST / GET) (không nên có)
  • yêu cầu lặp lại từ cùng một IP
  • và bất kỳ sự khác biệt nào khác ...

BTW, "sự kiện" 18:00 là đủ bằng chứng cho tôi rằng nó không liên quan gì đến hoạt động / tắc nghẽn của trung tâm dữ liệu. Để điều đó là sự thật, sự tắc nghẽn sẽ gây ra sự sụt giảm TPS, điều này có thể xảy ra vào lúc 18:00 nhưng cực kỳ khó có thể gây ra sự sụt giảm kéo dài và cong trơn tru trong TPS trong 10 giờ từ 9 giờ tối đến 7 giờ sáng.

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.