Rất lâu rồi không trở lại viết blog, nghĩ mãi chưa ra cái chủ để nào để viết. Thôi viết về mấy cái đã cũ vậy, hy vọng là mấy cái chia sẻ nho nhỏ có chút info hoặc keyword gì cho người đọc,

Chuyện xảy ra là 1 ngày đẹp trời một máy ảo (Virtual Machine) trên vmware kiểm tra rõ là còn nhiều tài nguyên mà chạy ì ạch quá thể , mãi chưa nghĩ ra tại sao? khi đó ae hãy thử nghĩ tới việc kiểm tra máy vật lý coi, rất có thể nó đã bị đã quá tải rùi đó, vì máy ảo bản chất nó cũng xài tài nguyên của máy vật lý thôi chứ lấy đâu ra :), máy vật lý chậm làm sao máy ảo nhanh được (Mấy cái info trong máy ảo ae gõ lệnh kiểm tra thật ra cũng là tài nguyên ảo thôi nha). Vậy làm sao để ae trả lời cho câu hỏi “Máy vật lý esx đã quá tải chưa”? bài này tôi xin share một số kinh nghiệm cá nhân về vấn đề này.

Cách tiếp cận của tôi cũng dựa trên cái chân lý củ chuối huyền thoại “server chậm do một trong 4 nguyên nhân RAM, CPU, Network, Disk” (nói là củ chuối vì cái này ai chả biết, nói ra buồn cười). Ờ, chân lý có rồi, đây tôi chỉ bổ sung chi tiết cách làm thôi.

1. Làm sao để xác định CPU đã quá tải?

Theo tôi được biết ta có thể xác định bằng một số cách sau.

Cách 1: Đánh gía dựa vào load average

Ta cần ssh vào server esxi bằng account có quyền root, gõ lệnh esxtop. Kiểm tra dòng đầu tiên trong output của lệnh phần load average.

  • Nếu load average bằng 0,5: Hệ thống mới hoạt động được một nửa năng lực xử lý của CPU.
  • Nếu load average bằng 1: Hệ thống đã hoạt động 100% năng lực xử lý của CPU.
  • Nếu load average >= 2: Hệ thống thực sự đang bị overload.

Cách 2: Đánh gía dựa vào thông số %CPU ready

Theo VMWare thì %CPU để đánh gía tỉ lệ % thời gian mà máy ảo (VM) thực sự ready nhưng nó không được schedule để chạy trên server vật lý. Thông số này tính cho từng máy ảo. Hiển nhiên thông số này càng lớn thì càng không tốt. Server esxi khi quá tải thì %CPU ready có gía trị > 5%.

Để xác định cpu ready ta có 2 cách

  • Sử dụng esxitop: Rất đơn giản ta chỉ cần ssh vào server và gõ esxtop

esx top ready

Cột %RDY sẽ hiển thị % CPU ready hiện tại của từng VM.

  • Sử dụng vsphere client

Đối với bản mới thấy vmware có ghi là có tính sẵn %CPU ready trên dashboard. Trong mục perf monitor ở web client.

web client ready

Với bộ cài vsphere client trên windows (chỉ dùng được với esxi < 6.0 thì phải) thì CPU ready time không hiển thị mà vmware chỉ show ra thông số gọi là CPU ready summation.

windows client ready

Tuy nhiên ta cũng có thể dễ dàng chuyển đổi CPU ready summation sang dạng % CPU ready bằng công thức sau

(CPU summation value / (<chart default update interval in seconds> * 1000)) * 100 = CPU ready %

Trong đó với gía trị của vsphere client mặc định là 20s.

Ví dụ: Nếu trên dashboard của esxi hoặc vcenter hiển thị CPU ready summation là 1000. Ta sẽ có % CPU ready được tính như sau

(1000 / (20s * 1000)) * 100 = 5% CPU ready

2. Làm sao để xác định RAM đã quá tải?

3. Làm sao để xác định Network đã quá tải?

4. Làm sao để xác định Disk đã quá tải?

Trước khi bắt đầu ta nên hình dung là việc ghi data xuống storage của vmware sẽ được thực hiện thành từng bunch một (tiếng việc gọi là tực Cục). Quá trình thực hiện việc ghi các bunch này nó gọi là command.

Nhiều sysadmin hay hình dung việc đánh giá hiệu năng của disk/storage trên VMWare dựa trên IOPS hoặc throughput (chắc là do ảnh hưởng của linux). Tuy nhiên theo ý kiến cá nhân tôi cách tốt nhất để xác định disk của VMWare đã bị quá tải chưa là dựa trên thông số disk latency. Cụ thể với VMWare ta cần chú ý một vài thông số sau.

  • KernealLatency: Thời gian trung bình (đơn vị tính bằng milisecond) mà VMWare kerel dành để xử lý một SCSI command. Giá trị này tốt nhất trong khoảng 0 ms - 1 ms. Nếu giá trị này > 4 ms chứng tỏ VM đang dành quá nhiều thời gian cho việc ghi data xuống storage.

  • DeviceLatency: Thời gian trung bình (đơn vị tính bằng milisecond) mà VMWare hoàn thành một SCSI command từ physical device. Thông số này thường phụ thuộc vào năng lực của hardware. Tuy nhiên thông thường nếu thông số này > 15ms chứng tỏ đang có vấn đề với storage.

  • QueueLatency: Là khoảng thời gian thực hiện một SCSI command trong VMkernel queue. Giá trị này phải bằng 0. Nếu giá trị này khác 0 chứng tỏ đang xảy ra quá tải quá lớn trên hệ thống và không thể đáp ứng khả năng xử lý data.

Để view các thông số này ta bắt buộc phải sử dụng vcenter (Không hiểu tại sao đội vmware lại không expose nó trên esxi standalone). Với tôi thì tôi thường không xem ngay trên perf mon của VCenter mà hay cấu telegraf để get thông tin từ VCenter rồi đẩy vào influxdb sau đó visualize trên Grafana.

Chi tiết về thông số này mọi người có thể tham khảo tại đây: Link tham khảo