Tại sao tập tin xử lý một nguồn tài nguyên khan hiếm?


7

Tôi cảm thấy như mọi hướng dẫn tôi đọc về quản lý tài nguyên trong cài đặt máy chủ bắt đầu bằng cách khẳng định rằng các tệp xử lý tệp là một tài nguyên khan hiếm và do đó chúng ta nên đặt mục tiêu giữ danh sách các tệp đang mở ở mức tối thiểu.

Nhưng tôi không thực sự hiểu tại sao chúng là nguồn tài nguyên khan hiếm. Không phải là một mô tả tập tin chỉ là một số? Linux có bao nhiêu trạng thái phải theo dõi trên mỗi tệp đang mở? Là số lượng tệp mở bị hạn chế do vấn đề bộ nhớ hoặc một cái gì đó hoàn toàn khác nhau?


Không phải là một câu trả lời, chỉ là một liên kết làm thế nào để kiểm tra giới hạn stackoverflow.com/questions/1356675/ory
orion

theo ý kiến ​​của tôi, đó là sự hiểu biết của con người, ngày bạn cần gỡ lỗi và bảo mật, làm thế nào một con người có thể hiểu và gỡ lỗi 150000 tệp nếu bạn làm chủ các tệp mở mọi lúc bạn có thể dễ dàng xác định nếu ai đó sử dụng máy chủ của bạn vì nó không nên sử dụng
Kiwy

Câu trả lời:


3

Các tệp đang mở được quản lý bởi một cấu trúc trong bộ nhớ kernel xử lý tham chiếu inode trong bộ nhớ.
Họ cũng theo dõi chế độ mở của tệp, vị trí trong tệp cũng như bộ đệm.

AFAIK trong hầu hết các hệ thống UNIX / Linux, cấu trúc đó không thể bị tráo đổi và vì kích thước lưu trữ thường lớn hơn theo một hoặc hai lần so với bộ nhớ, nên hầu như không thể mở một lượng đáng kể các tệp trong bộ nhớ cùng một lúc
Ngoài ra, không phải tất cả các nền tảng đều có deamon đồng bộ hóa hoạt động, do đó, thông tin bằng văn bản đôi khi có thể chỉ được lưu trong bộ đệm cho đến khi thực hiện đồng bộ hóa hoặc đóng.

Ngoài ra, có rất nhiều trình xử lý tệp đang được sử dụng mà bạn không phải là nhà phát triển biết về chúng, chẳng hạn như các thư viện được tải động và các tệp nhị phân / trình thông dịch chương trình.


2

Một số trong số đó là như bạn đã nói, đó là "chỉ là một số" - và nếu bạn muốn thỉnh thoảng có thể sử dụng số cao hơn số bạn có thể phù hợp với (hãy nói) một kiểu dữ liệu số nguyên, thì bạn phải sử dụng một kiểu dữ liệu lớn hơn cho tất cả các mô tả ... ví dụ. 2 byte cho mỗi descriptorID, thay vì chỉ 1 byte - và nhân đôi kích thước của tất cả các mô tả của bạn, sẽ sớm làm chảy bộ nhớ, bộ nhớ có thể được sử dụng tốt hơn cho các ứng dụng thay vì chỉ cho HĐH.

Ngoài ra còn có rất nhiều thông tin khác được xác nhận với các mô tả cũng như sự cần thiết phải giữ các danh sách đang sử dụng và miễn phí - có những giới hạn đối với các cơ sở dữ liệu này có thể duy trì hiệu quả như thế nào.


2

Theo hướng dẫn này , bạn có thể nhận được số lượng xử lý tệp mở tối đa từ một cuộc gọi đến cat /proc/sys/fs/file-max. Trên hệ thống của tôi, tôi nhận được giá trị 797736, khá lớn. Một cách nhanh chóng ps -e|wc -lcho tôi biết tôi có khoảng 200 quy trình đang chạy, điều đó có nghĩa là bất kỳ chương trình cụ thể nào cũng có thể mở khoảng 4000 xử lý tệp.

Tuy nhiên, đó là một giá trị toàn cầu - bạn có thể nhận được cụ thể hơn, bằng cách sử dụng ulimit. ulimit -abáo cáo rằng tôi có thể có tối đa 1024 tệp xử lý mở, đây vẫn là một con số khá lớn, mặc dù không có gì so với mức tối đa tuyệt đối. Nhưng, điều này có thể tăng lên nếu bạn cần nó và vì vậy không thực sự là một giới hạn cứng .

Vì vậy, kết luận của tôi? Xử lý tập tin không phải là một nguồn tài nguyên khan hiếm. Các hướng dẫn chỉ muốn đảm bảo rằng bạn chỉ mở các tệp trong khi bạn cần chúng, bởi vì nếu bạn để các tệp xử lý mở, nó có thể gây trở ngại cho các quy trình khác cũng có thể đang cố gắng làm việc với các tệp, đặc biệt nếu bạn đang khóa chúng khi bạn mở chúng .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.