Làm thế nào để bạn ước tính bao nhiêu bộ nhớ để mua?


10

Tôi có một ứng dụng máy chủ tùy chỉnh chạy trên Windows 2008 R2. Đây là một Dịch vụ Windows được phát triển tại nhà được viết bằng .Net hỗ trợ một số thiết bị đầu cuối tùy chỉnh. Tôi có một máy kiểm tra có thông số kỹ thuật tương tự máy chủ trực tiếp và tôi có một bộ mô phỏng máy khách mà tôi có thể sử dụng để tạo ra một tải gần đúng với hệ thống thực. Tôi cần có khả năng hỗ trợ 12.000 trong số này và hiện tại máy chủ sắp hết bộ nhớ (Paging đang đi qua mái nhà).

Kế hoạch của tôi là chỉ bắt đầu 100 bộ mô phỏng, đo mức sử dụng bộ nhớ, sau đó bắt đầu lại bộ nhớ đo thêm 100 lần nữa và lặp lại cho đến khi phân trang bắt đầu tăng (Trong thực tế tôi sẽ lấy hơn ba điểm dữ liệu.) Điều này sẽ cho tôi một con số dung lượng bộ nhớ bổ sung cần thiết cho 100 trình giả lập và cho phép tôi chiếu số lượng bộ nhớ cần thiết. Tôi chỉ cần một ý tưởng sơ bộ +/- 30Gb để tránh mua toàn bộ 2Tb (trị giá 150.000 đô la) mà máy chủ sẽ lấy. Câu hỏi của tôi là liệu đây có phải là một phương pháp hợp lý để sử dụng không và nếu có thì Bộ đếm hiệu suất nào bạn sẽ theo dõi để cung cấp lượng bộ nhớ thực sự được sử dụng?

Tôi đặc biệt nói về bộ nhớ ở đây vì sự khác biệt giữa Bộ làm việc, byte riêng, cam kết, chia sẻ, ảo và tất cả các thuật ngữ bộ nhớ khác làm tôi bối rối. Tôi nghĩ rằng tôi có thể tự mình quản lý để giám sát CPU, IO và Mạng. Một điều khác mà tôi nhận thấy là .Net Cache điều chỉnh mức sử dụng bộ nhớ của nó tùy thuộc vào những gì có sẵn khiến cho việc phát hiện xu hướng khó thấy.


Tôi thực sự cảnh giác với việc sử dụng bộ nhớ chiếu dựa trên 2 điểm dữ liệu rất gần nhau. Tôi có nghi ngờ nghiêm trọng rằng việc sử dụng bộ nhớ (và I / O, đối với vấn đề đó) sẽ mở rộng tuyến tính. Nó có thể, nhưng tôi nghi ngờ nó sẽ có xu hướng phi tuyến tính khi bạn di chuyển đến số lượng lớn. Tôi đã thử nghiệm với một số điểm dữ liệu, tiến triển từ nhỏ đến lớn cho đến khi hiệu suất trở nên có vấn đề (phân trang, bão hòa I / O, v.v.) và dự án từ đó. Nếu có thể nâng cấp dần dần máy và tiếp tục mô phỏng số lượng khách hàng lớn hơn tôi sẽ làm như vậy cho đến khi tôi có cảm giác tốt về hình dạng của đường cong.
Evan Anderson

Bạn cũng cần cung cấp cho bit một ý tưởng tốt hơn về những gì đây là. Có phải là web không? aspx? Phốt? Một cái gì đó cây nhà? Công việc hàng loạt? Hành vi của asp.net khác với vô số exes đang chạy trên một hộp. Bạn cần một số ý tưởng cơ bản về những gì hệ thống sử dụng cho mỗi người dùng - khoảng. số liệu - và sau đó là một phong bì cũ. Làm thế nào bạn có được những số liệu phụ thuộc vào cách hệ thống của bạn hoạt động.
Ian Murphy

@Evan. Tôi đã luôn luôn mất nhiều hơn hai điểm dữ liệu.
Martin Brown

@Ian: "một số ý tưởng cơ bản về những gì hệ thống sử dụng cho mỗi người dùng" hoàn toàn là những gì tôi đang cố gắng tìm hiểu. Nếu tôi biết điều này tôi sẽ không cần phải đặt câu hỏi. Tôi đã cập nhật câu hỏi để cố gắng bao gồm các điểm khác của bạn.
Martin Brown

Câu trả lời:


8

Thành thật? TÔI KHÔNG .
Khi chỉ định một máy chủ sẽ thấy bất kỳ loại khối lượng công việc thực tế nào, tôi sẽ nhồi nhét nhiều RAM nhất có thể (các hệ thống có khả năng tăng cường hạn chế RAM hơn so với CPU hoặc Đĩa bị hạn chế - chỉ có một nút thắt được bảo đảm khác là phía trước xe buýt).

Nếu bạn muốn tìm hiểu xem ứng dụng của bạn có thể sử dụng bao nhiêu RAM, như bạn đã đề xuất là một khởi đầu tốt, nhưng nếu bạn đã hệ thống này trong sản xuất (có vẻ như bạn làm) và hệ thống sản xuất của bạn đang hoán đổi nhiệm vụ dễ dàng hơn: Tìm hiểu xem bạn đang sử dụng bao nhiêu dung lượng trao đổi -> Thêm ít nhất gấp 2 lần RAM đó (làm tròn để phù hợp với các ràng buộc kích thước DIMM của hệ thống của bạn).

Nếu bạn thực hiện kiểm tra tải để lấy số thô và ngoại suy từ đó, hãy nhớ yếu tố trong một số điều:

  1. Đường cong bộ nhớ có thể sẽ là hai phân đoạn riêng biệt
    (ban đầu tăng mạnh khi các khung / thư viện dùng chung được lưu vào bộ đệm, sau đó là một đường cong hơi dốc hơn khi mỗi mã không thể chia sẻ của ứng dụng mới được đưa vào bộ nhớ)

  2. Bạn vẫn cần RAM miễn phí cho đĩa và bộ nhớ đệm thư viện dùng chung và cho HĐH.
    (Điều này nên có ít nhất một vài hợp đồng về những gì ứng dụng của bạn cần)

  3. TẤT CẢ phần mềm bị rò rỉ bộ nhớ (ít nhất là tất cả các phần mềm thực tế), vì vậy hãy theo dõi điều đó trong thử nghiệm của bạn và chắc chắn rằng bạn có phòng để xử lý rò rỉ.

  4. Tải của bạn có thể sẽ tăng trong suốt vòng đời của máy chủ. Lên kế hoạch phù hợp.
    (Nếu bạn không có số lượng lập kế hoạch năng lực tốt, hãy tăng gấp đôi khối lượng công việc hôm nay và lên kế hoạch để xử lý việc đó).

  5. Mua quá nhiều RAM ngày hôm nay rẻ hơn so với việc môi trường của bạn sụp đổ vào ngày mai.

    • Hệ quả đầu tiên: Nếu bạn mua một máy chủ lớn hơn một chút so với nhu cầu của bạn, bạn là quản trị viên trước đó đã duy trì hoạt động của công ty. Bạn sẽ bị bỏ qua phần lớn và không được đánh giá cao.
    • Hệ quả thứ hai: Nếu bạn đặt dưới kích thước của máy và có vấn đề thì bạn là một con trâu bất tài không thể lường trước được sự tăng trưởng 500% và mọi người đều ghét bạn.

Tôi chấp nhận các hệ quả.
mfinni


Cảm ơn vì điều đó. Mặc dù chúng tôi có hệ thống này hoạt động, nhưng hiện tại nó đang hỗ trợ một thử nghiệm rất nhỏ, điều đó có nghĩa là tôi không thể có được những số liệu tốt.
Martin Brown

0

Cảm ơn, bản cập nhật ít nhất cung cấp cho mọi người một đầu mối. Rằng bạn đang suy nghĩ về 2Tb bộ nhớ nghĩa là bạn đang chơi ở một sân bóng khác với các thiết lập thông thường. Hệ thống lớn. ghét phải nghĩ đến bao nhiêu nhiệt sẽ được đưa ra.

Cho rằng đó là quy trình máy chủ nội bộ và bạn sắp hết bộ nhớ (bạn không nói ở cấp độ nào bạn bắt đầu phân trang) nhưng tôi muốn loại bỏ khả năng mà quy trình máy chủ đang tiêu thụ lượng bộ nhớ lớn hơn trước khi đi thêm nữa. Nếu điều này xảy ra, nó sẽ không khác biệt những gì bạn làm, hệ thống sẽ dừng lại ở một số điểm.

Tôi không biết về bất kỳ công cụ chung nào mà bạn có thể sử dụng để cung cấp cho bạn nhiều hơn một tổng quan cơ bản về những gì đang diễn ra ... những gì đi kèm với các cửa sổ. Bản thân quy trình dịch vụ là một hộp đen và nhóm nhà phát triển của bạn cần cung cấp các công cụ giám sát.

Nhanh chóng tính toán lại phong bì:

2Tb of memory = 1024Gb = 1024*1024Mb = 1048576Mb
1048576Mb / 13000 connections = around 80mb per session

Điều này sẽ không nằm ngoài phạm vi của tập làm việc .net exe bình thường.

Dịch vụ có nhiều luồng không? Nếu họ đang khởi chạy một luồng cho mỗi kết nối, sẽ đáng để xem cách họ đang làm điều này. ProcExp.exe từ microsoft là một cách dễ dàng để xem bạn có nhiều luồng không và những luồng đó đang tiêu thụ. Nó không biết về .net nhưng sẽ cung cấp cho bạn bộ đếm win32.

Bạn có thể chỉ ra bao nhiêu bộ nhớ và bao nhiêu kết nối bạn có khi thực hiện kiểm tra trước khi bắt đầu phân trang không?

Vì vậy, làm thế nào để thiết lập nếu quá trình máy chủ có vấn đề rò rỉ bộ nhớ? Nó có thể được tích lũy thêm bộ nhớ với mỗi phiên được kết nối hoặc có thể là tích lũy bộ nhớ và không giải phóng chúng bao giờ.

Những gì bạn có thể làm là - chọn một số phiên không kích hoạt phân trang và mô phỏng số lượng kết nối đó. - Chạy mô phỏng trong vài giờ và sử dụng perfmon để xem các bộ nhớ cơ bản. - Lặp lại các thử nghiệm này với các phiên kết nối nhanh và ngắt kết nối.

Ý tưởng là để xem liệu dịch vụ có tiêu tốn nhiều bộ nhớ hơn với mỗi phiên hay không, nếu các phiên mở gây ra việc sử dụng bộ nhớ ngày càng tă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.