[Solaris] Hướng dẫn kiểm tra số lượng file đang được mở bởi 1 tiến trình trên Solaris

101

Đôi khi bạn sẽ thấy xuất hiện thông báo lỗi “too many open files” được hiển thị trong file log /var/adm/messages. Trong những trường hợp như thế này, thường chúng ta cần kiểm tra xem bao nhiêu tập tin hoặc file đang được mở bởi một tiến trình. Số lượng tập tin hiện đang được mở bởi một tiến trình nhất định có thể được kiểm tra bằng 2 cách trên hệ thống Solaris như sau:

– Lệnh “pfiles
– Sử dụng thông tin hệ thống filesystem /proc/<pid>/fd .

 

1. Sử dụng lệnh “pfiles”

– Chương trình lệnh “pfiles” sẽ hiển thị cấu hình giới hạn hiện tại quy định số lượng tập tin được phép mở bởi 1 tiến trình (rlimit x file descriptors) và biết thêm thông tin về tất cả các file đang được mở bởi tiến trình đó.

– Xem ví dụ sau đây: Chạy lệnh ‘sleep‘ 120 giây ở chế độ nền và sau đó chạy lệnh “pfiles” với tham số truyền vào là PID của lệnh ‘sleep‘.

 
– Như bạn thấy từ output ở trên xuất ra cho chúng ta thông tin về 3 file đang được mở bởi tiến trình lệnh ‘sleep‘, tổng cộng là 3 file. Ta có thể sử dụng câu lệnh sau để rút ngắn thông tin bằng cách count số lượng thông tin file xuất hiện như sau.

 
Lưu ý :

Tuy nhiên, theo manual của lệnh ‘pfiles’, ‘pfiles’ sẽ dừng tiến trình mục tiêu mà ta chỉ định trong giây lát nhằm kiểm tra chúng và báo cáo kết quả mà ta mong muốn. Điều này có thể có tác động tiêu cực đến hiệu suất tiến trình ứng dụng đang hoạt động ở thời điểm yêu cầu xử lý cao và nhiều.

 

2. Sử dụng thông tin trong filesystem ‘/proc/<pid>/fd’

– Số lượng file được mở bởi 1 tiến trình có thể kiểm tra bằng cách xem xét nội dung của thư mục ‘/proc/<pid>/fd‘ của tiến trình có thông tin ‘pid‘ tương ứng. Thư mục con tên ‘./fd/‘ có chữ ‘fd‘ đại diện cho cụm từ ‘file descriptors‘.
– Ví dụ trong tình huống của chúng ta sẽ là thư mục : /proc/19384/fd/

 
Một file đặc biệt đại diện cho mỗi hoạt động mở file của tiến trình (Character device file(c)), nên có thể bạn sẽ thấy phần kí tự đại diện của loại file này là ‘c‘ như ví dụ trên. Bằng cách đếm số lượng tập tin đang có trong thư mục con ‘./fd‘ của /proc/<pid>/ ta có thể biết được cụ thể số lượng tập tin đang được mở bởi một tiến trình.

 

Cám ơn các bạn đã đọc bài viết. 🙂

Đánh giá sao từ người đọc :
[ Tổng : 0 - Trung bình: 0 ]