Khi bạn log vào server đang gặp vấn đề về performance. Đâu sẽ là thứ bạn cần kiểm tra trong 1 phút đầu tiên? Bài viết dưới đây sẽ là một cơ số high idea cho bạn để tìm có thể tìm ra nguyên nhân của vấn đề.

Bs image

Đoạn giới thiệu hơi kêu (trích từ bài viết gốc) :) Hôm nay lang thang medium đọc được bài viết này thấy khá là hay. Chắc chắn có nhiều công cụ đã quen với ae quá rồi, kiểu gì ae chả sử dụng ít nhất vài lần trong đời sys. Nhưng vấn đề là nhiều khi log vào server với một tá người ngồi cạnh kêu ca bầu dục này nọ ae thường bị stuck quên hết cmnl cần làm gì. Bài viết sẽ là sự tồng hợp nhẹ coi như checklist để ae apply tránh sót thôi.

Resource của server gồm: DISK, RAM, CPU, NET => Đương nhiên server gặp vấn đề về performace chắc chắn bị bottlenechk tại 1 trong các yếu tố này (Hiển nhiên cml nói nhiếu). Nhưng làm sao để xác định tái cái nào? OK các công cụ dưới sẽ giúp ae đánh giá sơ bộ cái nào đang có vấn đề.

Để bắt đầu a/e phải cài gói sysstat

Redhat base:

[[email protected] ~]# yum install sysstat -y

Debian base:

$ sudo apt-get install sysstat -y

1. uptime

Uptime

Đây là một cách nhanh chóng để xem load average, các thông số này cho biết số lượng task (process) chờ để chạy. Trên các hệ thống Linux, những con số này bao gồm số lượng các processes chờ để chạy trên CPU, cũng như các process bị blocked chờ để I/O (thường là disk I/O). Điều này sẽ đưa ra idea đầu tiên cho ae về tải của tài nguyên server, nhưng để xác định chi tiết hơn cần thêm các công cụ khác. Cái này chỉ để ae xem nhanh thôi.

Ba số được ghi lại tại 3 mức t/g 1 phút, 5 phút và 15 phút. Ba con số cho ta thông cách tải svr thay đổi theo thời gian. Ví dụ: nếu kiểm tra máy chủ có vấn đề và giá trị 1 phút thấp hơn nhiều so với giá trị 15 phút, thì ae có thể đã đăng nhập quá muộn và bỏ lỡ vấn đề.Trong ví dụ trên, trung bình tải cho thấy mức tăng gần đây, đạt 0.00 cho giá trị 1 phút, so với 0.03 cho giá trị 15 phút. Con vps cùi bắp không dùng gì nên tải bé tí nhưng nếu những con số này lớn/rất lớn có nghĩa là svr đang rất có vấn đề, có thể là nhu cầu CPU và lệnh vmstat hoặc mpstat sẽ giúp ae khằng định lại điều này. Hai lệnh này cũng sẽ được nêu lên trong bài này.

2. dmesg -T | tail

dmesg

Lệnh này hiển thị 10 message cuối cùng (nếu có) trên hệ thống. Các lỗi có thể được os ghi ra đây và kiếm các lỗi có thể giúp ae tìm ra cause của vấn đề performance. Hãy đừng bỏ quên bước này! dmesg luôn luôn đáng để ae kiểm tra.

3. vmstat 1

vmastat

vmstat - khả năng là viết tắt của Virtal Memory stats ae ạ, vmstat (8) là một công cụ thường có sẵn (đầu tiên được tạo cho BSD). Nó giúp ta có được thông tin tóm tắt các số liệu thống kê trọng trên mỗi dòng. vmstat được chạy với đối số là 1, để định chu kỳ lấy mẫu 1s một lần.

Trong đó ae cần chú ý nội dung các cột sau

  • r: Số tiến trình đang chạy trên CPU và chờ đến lượt được xử lý. Điều này cung cấp thông tin tốt hơn load avg lấy dựa vào câu lệnh uptime, vì nó không bao blocked do wait I/O. một giá trị r lớn hơn số lượng CPU khả năng là CPU đang quá tải.
  • free: Bộ nhớ free tính bằng kilobyte. Nếu có quá nhiều chữ số để đếm thì ae có thể xem xét lệnh free -m trong bài viết trước của tôi để thay thế.
  • si, so: swap in - swap out. Nếu đây là số khác không, khả năng vấn đề do svr ae đang bị hết bộ nhớ.
  • us, sy, id, wa, st: Đây là chi tiết tỉ lệ sự phân chia thời gian sử dụng của CPU - tính trung bình trên tất cả các CPU. Chúng là user time, system time (kernel), idle, wait I/O và stolen time.

CPU time breakdown giúp ta xác định CPU đang bận do user time, system time hay wait io time. VD: nếu wait time tức là cpu đang dành quá nhiều t/g để xử lý I/O. Lúc này rât có thể ổ đĩa đang gặp vấn đề hoặc process đọc ghi quá lớn.

4. mpstat -P ALL 1

vmastat

Lệnh này in ra thời gian xử lý CPU trên mỗi CPU, có thể được sử dụng để kiểm tra sự mất cân bằng trong hoạt động của svr của bạn. Một CPU sử dụng nhiều các CPU còn lại không được sử dụng có thể là bằng chứng của một ứng dụng của bạn hoạt động đơn luồng và không hiệu quả.

5. pidstat 1

pidstat

Đây là tool cung cấp cho ae thông tin tổng quan về tỉ lệ sử dụng bộ nhớ của các process quản lý bởi kernel. Tool này cũng không hay lắm nhưng đây là tool bài viết cung cấp, lược dịch nên giữ lại ko xóa đi nha e.

6. iostat -xz 1

iostats

Theo em đây là một công cụ tuyệt vời để hiểu các thiết bị ổ đĩa kiểu block device đang hoạt động như thế nào. Cụ thể công cụ sẽ cung cấp cho chúng ta các thông số sau:

  • r/s, w/s, rkB / s, wkB/s: Đây là tốc độ đọc, ghi đơn vị Kbytes trong mỗi mỗi giây vào thiết bị.
  • await: Thời gian trung bình cho I/O tính bằng mili giây. Đây là thời gian mà ứng dụng phải chịu đựng, vì nó bao gồm cả thời gian queue và thời gian được phục vụ. Nếu thời gian lớn hơn thời gian trung bình dự kiến có thể là một chỉ báo về độ bão hòa của thiết bị hoặc các sự cố của thiết bị.
  • avgqu-sz: Số lượng request trung bình được gửi cho thiết bị đĩa. Các giá trị lớn hơn 1 có thể là bằng chứng của quá tải (mặc dù các thiết bị thường có thể hoạt động song song với các request, đặc biệt là các thiết bị ảo có nhiều đĩa phía sau.)
  • %util: Tỉ lệ phần trăm bận rộn của thiết bị, hiển thị tỉ lệ thời gian mỗi giây mà thiết bị đang hoạt động. Các giá trị lớn hơn 60% thường dẫn đến hiệu suất kém, mặc dù điều này phụ thuộc vào thiết bị. Giá trị gần 100% thường biểu thị độ bão hòa. Nếu thiết bị lưu trữ là thiết bị đĩa logic phía trước nhiều đĩa back-end, thì việc sử dụng 100% có thể chỉ có nghĩa là một số I/O đang được xử lý 100% thời gian, tuy nhiên, các đĩa back-end có thể không bão hòa, và có thể có thể xử lý nhiều công việc hơn. Hãy nhớ rằng I / O đĩa hoạt động kém không nhất thiết là một vấn đề. Hienj nay nhiều kỹ thuật thường được sử dụng để thực hiện I/O bất đồng bộ, do đó ứng dụng không bị block và chịu độ trễ trực tiếp (ví dụ: read-ahead for reads and buffering for writes).

7. free -m

Em đã có hẳn 1 bài về lệnh này. Ae tham khảo tại đây nha Nội dung nhạy cảm. Click để hiển thị

  1. sar -n DEV 1

iostats

Sử dụng công cụ này để kiểm tra thông tin througput trên toàn bộ các interface. Các thông số rxkB/s (r - receive) txkB/s (t - transfer <=>send) cho ae thấy througput trên từng interface ở mức độ cụ thể như thế nào Phiên bản này cũng có %ifutil đại diện cho tỉ lệ mức độ hoạt động của interface (tính là full duplex 2 chiều nha e).

9. sar -n TCP,ETCP 1

iostats

Lệnh giúp ae có được overview về các kết nối TCP trên hệ thống. Bao gồm các:

  • active/s: Số lượng kết nối TCP được khởi tạo cục bộ mỗi giây (ví dụ: thông qua hàm connect()).
  • passive/s: Số lượng kết nối TCP được khởi tạo từ xa mỗi giây (ví dụ: thông qua hàm accept()).
  • retrans/ s: Số lần truyền lại TCP mỗi giây.

Số active và passive thường hữu ích vì nó như một thước đo sơ bộ về tải máy chủ. Ae có thể tạm hiểu Active như là outbound và passive như inbound. Khi số lượng retrans lớn có thể là một dấu hiệu của vấn đề mạng hoặc máy chủ; nó có thể là do mạng quá lớm loss liên lục làm mất gói phải truyền lại hoặc có thể là do máy chủ bị quá tải và rớt các gói.

10. top

Em cũng có 1 bài khá dài về top rồi, ae tham khảo nha Nội dung người lớn. Click để hiển thị

Bài viết dài quá, cơ bản do lược dịch nên phải giữ format coi như tôn trọng tác giả nên ae thông cảm nha :)

Many thanks,

Tham khảo:

Netflix techblog