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

395
27-03-2018
Hướng dẫn chi tiết nhất cách kiểm tra số lượng file đang được mở bởi 1 tiến trình trên Solaris

Đôi khi, thông báo lỗi too many open files sẽ hiển thị trong /var/adm/messages. Trong những trường hợp này, bạn cần phải biết có bao nhiêu tệp đang được mở bởi một tiến trình. Số lượng tệp hiện được mở bởi một tiến trình nhất định theo 2 cách. Hãy cùng Bizfly Cloud  tìm hiểu qua bài viết dưới đây nhé!

Sử dụng lệnh pfiles

Lệnh pfiles hiển thị giới hạn hiện tại của số lượng tệp đang mở cho tiến trình và thông tin thêm về tất cả các tệp đang mở của tiến trình đó. Ví dụ: Chạy lệnh sleep 120 giây ở chế độ nền và sau đó chạy lệnh pfiles trên PID của lệnh sleep.

# sleep 120& 

[1] 29803

Sau đó:

# pfiles 29803

29803: sleep 120

Current rlimit: 256 file descriptors

0: S_IFCHR mode:0620 dev:270,0 ino:12582920 uid:84883 gid:7 rdev:24,2

O_RDWR|O_NOCTTY|O_LARGEFILE

/devices/pseudo/pts@0:2

1: S_IFCHR mode:0620 dev:270,0 ino:12582920 uid:84883 gid:7 rdev:24,2

O_RDWR|O_NOCTTY|O_LARGEFILE

/devices/pseudo/pts@0:2

2: S_IFCHR mode:0620 dev:270,0 ino:12582920 uid:84883 gid:7 rdev:24,2

O_RDWR|O_NOCTTY|O_LARGEFILE

/devices/pseudo/pts@0:2

Như bạn có thể thấy từ output, 3 tập tin được mở bằng lệnh sleep. Để chỉ kiểm tra số lượng tệp mở của một quy trình, hãy sử dụng chuỗi lệnh sau:

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

3

Lưu ý:

Tuy nhiên, theo các pfiles man pages, các pfiles stop[s] their target processes while inspecting them and reporting the results (tạm dịch: dừng [s] các quy trình đích của chúng trong khi kiểm tra và báo cáo kết quả). Điều này có thể có một tác động tiêu cực đến hiệu suất ứng dụng trong trường hợp lệnh pfiles được chạy trên active process.

Sử dụng hệ thống tệp /proc 

Số lượng tệp được mở bằng một tiến trình cũng có thể được kiểm tra bằng cách kiểm tra nội dung của thư mục /proc/[PID]/fd (trong ví dụ này là /proc/29803/fd):

# ls -al /proc/29803/fd/

total 19

dr-x------ 2 root root 8208 Oct 24 15:46 .

dr-x--x--x 5 root root 864 Oct 24 15:46 ..

c--------- 1 soluser1 tty 24, 2 Oct 24 15:47 0

c--------- 1 soluser1 tty 24, 2 Oct 24 15:47 1

c--------- 1 soluser1 tty 24, 2 Oct 24 15:47 2

Có một tệp ký tự đặc biệt cho mỗi tệp mở của tiến trình đó. Bằng cách đếm số lượng tệp trong thư mục con fd của /proc /[PID], số lượng tệp mở của tiến trình có thể được kiểm tra nhanh chóng.

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

3

Dịch từ: thegeekdiary.com/solaris-how-to-find-number-of-open-files-by-a-process/

>> Có thể bạn quan tâm: Hướng dẫn nâng cấp Debian 8 lên Debian 9 Stretch


SHARE