[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

Đô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‘.

# sleep 150&
[1] 19384
# pfiles 19384
19384: sleep 150
   Current rlimit: 256 file descriptors
      0: S_IFCHR mode:0620 dev:554,0 ino:1294217325 uid:0 gid:7 rdev:7,1
         O_RDWR|O_NOCTTY|O_LARGEFILE
         /dev/pts/1
         offset:292738
      1: S_IFCHR mode:0620 dev:554,0 ino:1294217325 uid:0 gid:7 rdev:7,1
         O_RDWR|O_NOCTTY|O_LARGEFILE
         /dev/pts/1
         offset:292738
      2: S_IFCHR mode:0620 dev:554,0 ino:1294217325 uid:0 gid:7 rdev:7,1
         O_RDWR|O_NOCTTY|O_LARGEFILE
         /dev/pts/1
         offset:292738

 
– 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.

# pfiles 19384 | nawk '/[0-9]: /{a++}END{print a}'
3

 
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/

# ls -al /proc/19384/fd/
/proc/19384/fd/:
total 19
17 dr-x------ 2 root root 8.0K Aug 11 12:42 .
2 dr-x--x--x 5 root root 864 Aug 11 12:42 ..
0 c--------- 1 root tty 7, 1 Aug 11 12:43 0
0 c--------- 1 root tty 7, 1 Aug 11 12:43 1
0 c--------- 1 root tty 7, 1 Aug 11 12:43 2

 
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.

# ls /proc/19384/fd | nawk 'END{print NR}'
3

 

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

Previous article[News] Google triển khai dịch vụ đặt chỗ nhà hàng và giao đồ ăn uống ở Ấn Độ
Next article[Linux] Hướng dẫn thay đổi trình editor ‘nano’ cấu hình crontab thành trên Linux
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !