Sherlock!
Một khi bạn loại bỏ những điều không thể, bất cứ điều gì còn lại, cho dù có khả thi đến đâu, đều phải là sự thật. --Arthur Conan Doyle
Trước tiên, bạn có thể muốn xem bài nói chuyện này , đây là một cuộc thảo luận về nguồn gốc của các vấn đề về hiệu suất và cách chẩn đoán chúng. Nó so sánh Linux với SmartOS, một loại tách biệt với quan điểm của bài đăng của bạn, nhưng nó cũng giúp làm sáng tỏ vấn đề hiệu suất đến từ đâu.
Thông thường khi bạn gỡ lỗi các vấn đề về hiệu năng với phần mềm, bạn nên thử và sao chép chính xác cấu hình phần mềm trên một máy vật lý riêng biệt, với cùng một phiên bản Java, cùng một hạt nhân, cùng một vùng người dùng, v.v. Nếu vấn đề về hiệu năng không tồn tại , sau đó bạn có thể bắt đầu xem xét phần cứng vật lý, lớp ảo hóa / lớp chứa hoặc các vấn đề cài đặt trên hộp của bạn.
Nếu người dùng chưa bao giờ chạy phần mềm này trong cấu hình phiên bản / hệ điều hành cụ thể này trước đó, thì họ không thể ngay lập tức cho rằng đó là máy chủ của bạn. Tôi thà đặt gánh nặng bằng chứng lên họ để chứng minh rằng, chạy CentOS 6 (với cùng một phiên bản nhỏ và cùng một trình ảo hóa và cùng một hệ điều hành máy chủ, nếu nó không chạy trên kim loại trần), họ có thể có hiệu suất tốt hơn.
Nếu hiệu năng tốt hơn là do chúng có nhiều thông số kỹ thuật hệ thống vượt trội (ví dụ: chúng chạy nó trên KVM 1 GB trên bộ xử lý cấp thấp trên cơ sở hạ tầng của bạn, nhưng trên hệ thống Ivy Bridge E5 24 lõi của riêng chúng với 8 ổ SSD PCIe phần cứng RAID0, nhanh hơn 1000%), sau đó bạn có thể bắt đầu nói về phần cứng vật lý. Nếu phần cứng vật lý giống hoặc rất giống nhau, bạn có thể bắt đầu nói về cấu hình OS / hypanneror.
Bạn cũng có thể xem xét khả năng, dựa trên hiệu suất của ứng dụng và số lượng người dùng và khối lượng công việc dữ liệu, phần cứng mà người dùng đã được phân bổ chỉ đơn giản là không đủ cho tác vụ. Nếu đây là một khách hàng rất quan trọng và giữ cho họ hạnh phúc là điều tối quan trọng đối với doanh nghiệp của bạn, bạn có thể thử sao lưu một số hạn chế mà bạn có thể áp dụng đối với thùng chứa ảo hoặc ví dụ VM của họ; ví dụ, tạm thời cung cấp cho họ thêm RAM hoặc thời gian CPU, băng thông mạng, v.v. và xem điều đó có giúp ích gì không. Nếu vậy, bạn có thể phải nói với người dùng rằng họ sẽ phải trả tiền cho một VM lớn hơn để có được hiệu suất họ muốn trên khối lượng công việc đó.
Thoát khỏi vết bỏng (khi đó không phải là vấn đề của bạn)
Nếu vì lý do nào đó, người dùng thẳng thừng từ chối thử cấu hình phần mềm tương tự trên phần cứng riêng biệt, bạn sẽ phải nhờ đến việc giúp họ khắc phục sự cố về hiệu suất trong ứng dụng của họ (điều khó có thể xảy ra trên Linux, như Brendan Gregg mô tả trong cuộc nói chuyện của anh ấy, đôi khi bạn có thể phải "mặc" chi phí hiệu năng đó), hoặc đơn giản nhấn mạnh rằng người dùng không chính xác. Đây là một tác dụng phụ đáng tiếc của việc hỗ trợ các nhà phát triển trên hệ thống của bạn.
Tại thời điểm này, bạn có thể cần phải tự hỏi mối quan hệ kinh doanh của bạn với người dùng của bạn (nếu có). Nếu bạn đang cung cấp dịch vụ lưu trữ không được quản lý trong khu vực tư nhân, bạn có thể phải khẳng định rằng bạn không chịu trách nhiệm đảm bảo hiệu suất của mã người dùng.
Nếu bạn đang cung cấp dịch vụ lưu trữ được quản lý hoặc có thỏa thuận khác để giúp những người phần mềm giải quyết vấn đề của họ bất kể vấn đề là lỗi của họ, bạn có thể phải xắn tay áo lên, làm bẩn tay và bắt đầu chạy một số cấu hình hiệu năng phức tạp hơn công cụ, để xem nếu bạn có thể phát hiện ra một vấn đề thực tế . Có phải nó chỉ là một giao thức chặn thực sự trò chuyện trên một ổ cắm mạng? Có phải bộ nhớ I / O-ràng buộc? Hoặc có thể BIOS không kích hoạt VT-x? Có quá nhiều khả năng để liệt kê.
Để tóm tắt phần này: nếu bạn có thể tìm thấy một số lý do kinh doanh hoặc chính trị để bào chữa cho mình khỏi trách nhiệm giải quyết vấn đề này, đó có thể là cách dễ dàng và hiệu quả nhất. Thật không may, điều này cũng có nghĩa là người dùng có thể không bao giờ khắc phục vấn đề của họ và có thể dùng đến việc xem xét các đối tác kinh doanh khác như một giải pháp thay thế.
Quạt lửa (khi đó là vấn đề của bạn)
Do chủ đề chung "xuất hiện" là Java, nên bạn có thể bắt đầu bằng cách ít nhất là xác định xem chính quá trình Java có đang chạy một số mã cực kỳ chậm hay không. Đối với điều này, lý tưởng nhất, nhà phát triển / người dùng / khách hàng sẽ có thể cung cấp cho bạn mã nguồn của chương trình Java của họ (và tất cả các thư viện phụ thuộc).
Hãy thử chạy chương trình dưới một hồ sơ tốt . Có hồ sơ miễn phí và không miễn phí; một ví dụ về một cái miễn phí là một ví dụ đi kèm với NetBeans . Bắt trình hồ sơ khởi chạy thành công và cung cấp cho ứng dụng của bạn có thể là một thách thức, tùy thuộc vào chính xác ứng dụng đó là gì, nhưng kết quả hầu như luôn luôn nói theo một cách nào đó.
Tất nhiên, bạn có thể sử dụng htop
và / hoặc iotop
để phát hiện xem máy ảo Java (hoặc RDBMS được liên kết) đang thực hiện một lượng CPU, I / O bộ nhớ hoặc I / O đĩa không vượt quá số lượng mà bạn xem xét " hợp lý "(đưa ra phần cứng và khối lượng công việc). Đây là những công cụ cực kỳ rộng và không phải lúc nào cũng cung cấp cho bạn bức tranh đầy đủ, bởi vì đôi khi các vấn đề về hiệu năng là về những gì chương trình không làm trong khi chờ đợi một thứ khác, có thể không liên quan đến nút cổ chai tài nguyên. Đây là một bước xử lý sự cố chung chung khi cố gắng khởi động xe của bạn để xác định xem động cơ có chạy đúng hay không. Nếu nó không bắt đầu, tốt, bạn sẽ làm gì? Cái đó'
Cuối cùng, tôi sẽ chỉ nhắc lại những gì Brendan Gregg đã nói trong bài nói chuyện của anh ấy, và đề cập đến DTrace. Chức năng đầy đủ của DTrace vẫn chưa được sao chép trên Linux, cũng không phải do sự tái hiện dtrace-on-linux, cũng như bất kỳ đối thủ nào, như SystemTap. Điều đó nói rằng, bạn có thể cố gắng sử dụng một trong những công cụ này và xem liệu nó có giúp ích gì không. Một số cái nhìn sâu sắc có thể tốt hơn không có .
Tất nhiên, bạn sẽ cần chuyên môn cụ thể với việc sử dụng các công cụ loại rất "dao-quân-dao" này. Bạn sẽ đạt được hầu hết chuyên môn đó thông qua rất nhiều kinh nghiệm (đọc: dùng thử và lỗi và googling). Đây không phải là vấn đề chỉ cần kích hoạt công cụ và để nó chỉ cho bạn vấn đề; bạn sẽ cần khắc phục sự cố dựa trên dữ liệu có sẵn. Nó không dễ. Hiệu suất hiếm khi là.