resource --- Thông tin sử dụng tài nguyên¶
Mô-đun này cung cấp các cơ chế cơ bản để đo lường và kiểm soát tài nguyên hệ thống được chương trình sử dụng.
sẵn có: Unix, not WASI.
Các hằng số tượng trưng được sử dụng để chỉ định các tài nguyên hệ thống cụ thể và yêu cầu thông tin sử dụng về quy trình hiện tại hoặc các quy trình con của nó.
Một OSError được đưa ra do lỗi hệ thống.
Giới hạn tài nguyên¶
Việc sử dụng tài nguyên có thể bị hạn chế bằng cách sử dụng chức năng setrlimit() được mô tả bên dưới. Mỗi tài nguyên được kiểm soát bởi một cặp giới hạn: giới hạn mềm và giới hạn cứng. Giới hạn mềm là giới hạn hiện tại và có thể được hạ xuống hoặc nâng lên bởi một quá trình theo thời gian. Giới hạn mềm không bao giờ có thể vượt quá giới hạn cứng. Giới hạn cứng có thể được hạ xuống bất kỳ giá trị nào lớn hơn giới hạn mềm, nhưng không được nâng lên. (Chỉ các quy trình có UID hiệu quả của siêu người dùng mới có thể tăng giới hạn cứng.)
Các tài nguyên cụ thể có thể bị hạn chế phụ thuộc vào hệ thống. Chúng được mô tả trong trang man getrlimit(2). Các tài nguyên được liệt kê bên dưới được hỗ trợ khi hệ điều hành cơ bản hỗ trợ chúng; các tài nguyên không thể được kiểm tra hoặc kiểm soát bởi hệ điều hành sẽ không được xác định trong mô-đun này cho các nền tảng đó.
- resource.RLIM_INFINITY¶
Hằng số được sử dụng để biểu thị giới hạn cho một nguồn tài nguyên không giới hạn.
- resource.getrlimit(resource)¶
Trả về một bộ
(soft, hard)với giới hạn cứng và mềm hiện tại là resource. TăngValueErrornếu tài nguyên không hợp lệ được chỉ định hoặcerrornếu lệnh gọi hệ thống cơ bản không thành công.
- resource.setrlimit(resource, limits)¶
Đặt giới hạn tiêu thụ mới của resource. Đối số limits phải là một bộ
(soft, hard)gồm hai số nguyên mô tả các giới hạn mới. Giá trịRLIM_INFINITYcó thể được sử dụng để yêu cầu giới hạn không giới hạn.Tăng
ValueErrornếu tài nguyên không hợp lệ được chỉ định, nếu giới hạn mềm mới vượt quá giới hạn cứng hoặc nếu một quá trình cố gắng tăng giới hạn cứng của nó. Chỉ định giới hạnRLIM_INFINITYkhi giới hạn phần cứng hoặc giới hạn hệ thống cho tài nguyên đó không giới hạn sẽ dẫn đếnValueError. Một quy trình có UID hiệu quả của siêu người dùng có thể yêu cầu bất kỳ giá trị giới hạn hợp lệ nào, kể cả không giới hạn, nhưngValueErrorvẫn sẽ được tăng lên nếu giới hạn được yêu cầu vượt quá giới hạn áp đặt của hệ thống.setrlimitcũng có thể tăngerrornếu lệnh gọi hệ thống cơ bản không thành công.VxWorks chỉ hỗ trợ cài đặt
RLIMIT_NOFILE.Tăng một auditing event
resource.setrlimitvới các đối sốresource,limits.
- resource.prlimit(pid, resource[, limits])¶
Kết hợp
setrlimit()vàgetrlimit()trong một chức năng và hỗ trợ nhận và đặt giới hạn tài nguyên của một quy trình tùy ý. Nếu pid bằng 0 thì lệnh gọi sẽ áp dụng cho quy trình hiện tại. resource và limits có cùng ý nghĩa như trongsetrlimit(), ngoại trừ limits là tùy chọn.Khi không cung cấp limits, hàm sẽ trả về giới hạn resource của quá trình pid. Khi limits được cấp, giới hạn resource của quy trình được đặt và giới hạn tài nguyên cũ được trả về.
Tăng
ProcessLookupErrorkhi không thể tìm thấy pid vàPermissionErrorkhi người dùng không cóCAP_SYS_RESOURCEcho quy trình.Tăng một auditing event
resource.prlimitvới các đối sốpid,resource,limits.sẵn có: Linux >= 2.6.36 with glibc >= 2.13.
Added in version 3.4.
Các ký hiệu này xác định các tài nguyên mà mức tiêu thụ của chúng có thể được kiểm soát bằng cách sử dụng các hàm setrlimit() và getrlimit() được mô tả bên dưới. Giá trị của các ký hiệu này chính xác là các hằng số được sử dụng bởi các chương trình C.
Trang man Unix cho getrlimit(2) liệt kê các tài nguyên có sẵn. Lưu ý rằng không phải tất cả các hệ thống đều sử dụng cùng một ký hiệu hoặc cùng một giá trị để biểu thị cùng một tài nguyên. Mô-đun này không cố gắng che giấu sự khác biệt của nền tảng --- các biểu tượng không được xác định cho một nền tảng sẽ không có sẵn trong mô-đun này trên nền tảng đó.
- resource.RLIMIT_CORE¶
Kích thước tối đa (tính bằng byte) của tệp lõi mà quy trình hiện tại có thể tạo. Điều này có thể dẫn đến việc tạo một tệp lõi nếu cần lõi lớn hơn để chứa toàn bộ hình ảnh quá trình.
- resource.RLIMIT_CPU¶
Lượng thời gian xử lý tối đa (tính bằng giây) mà một quy trình có thể sử dụng. Nếu vượt quá giới hạn này, tín hiệu
SIGXCPUsẽ được gửi đến quy trình. (Xem tài liệu mô-đunsignalđể biết thông tin về cách bắt tín hiệu này và thực hiện điều gì đó hữu ích, ví dụ: xóa các tệp đang mở vào đĩa.)
- resource.RLIMIT_FSIZE¶
Kích thước tối đa của tệp mà quá trình có thể tạo.
- resource.RLIMIT_DATA¶
Kích thước tối đa (tính bằng byte) của vùng heap của tiến trình.
- resource.RLIMIT_STACK¶
Kích thước tối đa (tính bằng byte) của ngăn xếp cuộc gọi cho quy trình hiện tại. Điều này chỉ ảnh hưởng đến ngăn xếp của luồng chính trong quy trình đa luồng.
- resource.RLIMIT_RSS¶
Kích thước tập hợp thường trú tối đa cần được cung cấp cho quy trình.
- resource.RLIMIT_NPROC¶
Số lượng quy trình tối đa mà quy trình hiện tại có thể tạo.
- resource.RLIMIT_NOFILE¶
Số lượng mô tả tệp mở tối đa cho quy trình hiện tại.
- resource.RLIMIT_OFILE¶
Tên BSD cho
RLIMIT_NOFILE.
- resource.RLIMIT_MEMLOCK¶
Không gian địa chỉ tối đa có thể bị khóa trong bộ nhớ.
- resource.RLIMIT_VMEM¶
Vùng bộ nhớ được ánh xạ lớn nhất mà tiến trình có thể chiếm giữ. Thường là bí danh
RLIMIT_AS.sẵn có: Solaris, FreeBSD, NetBSD.
- resource.RLIMIT_AS¶
Diện tích tối đa (tính bằng byte) của không gian địa chỉ mà quy trình có thể chiếm giữ.
- resource.RLIMIT_MSGQUEUE¶
Số byte có thể được phân bổ cho hàng đợi tin nhắn POSIX.
sẵn có: Linux >= 2.6.8.
Added in version 3.4.
- resource.RLIMIT_NICE¶
Mức trần cho mức đẹp của quy trình (được tính bằng 20 - rlim_cur).
sẵn có: Linux >= 2.6.12.
Added in version 3.4.
- resource.RLIMIT_RTPRIO¶
Mức trần ưu tiên thời gian thực.
sẵn có: Linux >= 2.6.12.
Added in version 3.4.
- resource.RLIMIT_RTTIME¶
Giới hạn thời gian (tính bằng micro giây) trên thời gian CPU mà một quy trình có thể sử dụng theo lịch trình thời gian thực mà không tạo ra một cuộc gọi tổng thể chặn.
sẵn có: Linux >= 2.6.25.
Added in version 3.4.
- resource.RLIMIT_SIGPENDING¶
Số lượng tín hiệu mà quá trình có thể xếp hàng.
sẵn có: Linux >= 2.6.8.
Added in version 3.4.
- resource.RLIMIT_SBSIZE¶
Kích thước tối đa (tính bằng byte) của mức sử dụng bộ đệm ổ cắm cho người dùng này. Điều này giới hạn dung lượng bộ nhớ mạng và do đó giới hạn số lượng mbuf mà người dùng này có thể nắm giữ bất kỳ lúc nào.
sẵn có: FreeBSD, NetBSD.
Added in version 3.4.
- resource.RLIMIT_SWAP¶
Kích thước tối đa (tính bằng byte) của không gian hoán đổi có thể được dành riêng hoặc sử dụng bởi tất cả các quy trình của id người dùng này. Giới hạn này chỉ được thực thi nếu bit 1 của vm.overcommit sysctl được đặt. Vui lòng xem tuning(7) để biết mô tả đầy đủ về hệ thống này.
sẵn có: FreeBSD >= 8.
Added in version 3.4.
Sử dụng tài nguyên¶
Các chức năng này được sử dụng để truy xuất thông tin sử dụng tài nguyên:
- resource.getrusage(who)¶
Hàm này trả về một đối tượng mô tả các tài nguyên được tiêu thụ bởi tiến trình hiện tại hoặc các tiến trình con của nó, như được chỉ định bởi tham số who. Tham số who phải được chỉ định bằng một trong các hằng số
RUSAGE_*được mô tả bên dưới.Một ví dụ đơn giản:
từ nhập tài nguyên * thời gian nhập khẩu nhiệm vụ # a không bị ràng buộc bởi CPU thời gian.ngủ(3) in(getrusage(RUSAGE_SELF)) nhiệm vụ ràng buộc # a CPU cho tôi trong phạm vi (10 ** 8): _ = 1 + 1 in(getrusage(RUSAGE_SELF))
Mỗi trường có giá trị trả về mô tả cách sử dụng một tài nguyên hệ thống cụ thể, ví dụ: lượng thời gian chạy ở chế độ người dùng hoặc số lần tiến trình được hoán đổi khỏi bộ nhớ chính. Một số giá trị phụ thuộc vào khoảng thời gian đánh dấu đồng hồ, ví dụ: lượng bộ nhớ mà tiến trình đang sử dụng.
Để tương thích ngược, giá trị trả về cũng có thể truy cập được dưới dạng bộ gồm 16 phần tử.
Các trường
ru_utimevàru_stimecủa giá trị trả về lần lượt là các giá trị dấu phẩy động biểu thị lượng thời gian dành cho việc thực thi ở chế độ người dùng và lượng thời gian dành cho việc thực thi ở chế độ hệ thống. Các giá trị còn lại là số nguyên. Tham khảo trang man getrusage(2) để biết thông tin chi tiết về các giá trị này. Một bản tóm tắt ngắn gọn được trình bày ở đây:chỉ mục
trường
Tài nguyên
0ru_utimethời gian ở chế độ người dùng (giây nổi)
1ru_stimethời gian ở chế độ hệ thống (giây nổi)
2ru_maxrsskích thước tập hợp cư dân tối đa
3ru_ixrsskích thước bộ nhớ chia sẻ
4ru_idrsskích thước bộ nhớ không chia sẻ
5ru_isrsskích thước ngăn xếp không được chia sẻ
6ru_minfltlỗi trang không yêu cầu I/O
7ru_majfltlỗi trang yêu cầu I/O
8ru_nswapsố lần trao đổi
9ru_inblockchặn hoạt động đầu vào
10ru_oublockkhối hoạt động đầu ra
11ru_msgsndtin nhắn đã gửi
12ru_msgrcvtin nhắn đã nhận
13ru_nsignalstín hiệu nhận được
14ru_nvcswchuyển đổi bối cảnh tự nguyện
15ru_nivcswchuyển đổi bối cảnh không tự nguyện
Hàm này sẽ tăng
ValueErrornếu tham số who không hợp lệ được chỉ định. Nó cũng có thể đưa ra ngoại lệerrortrong những trường hợp bất thường.
- resource.getpagesize()¶
Trả về số byte trong một trang hệ thống. (Điều này không cần phải giống với kích thước trang phần cứng.)
Các ký hiệu RUSAGE_* sau đây được chuyển đến hàm getrusage() để chỉ định thông tin quy trình nào sẽ được cung cấp.
- resource.RUSAGE_SELF¶
Chuyển tới
getrusage()để yêu cầu tài nguyên được tiêu thụ bởi quá trình gọi, đây là tổng tài nguyên được sử dụng bởi tất cả các luồng trong quy trình.
- resource.RUSAGE_CHILDREN¶
Chuyển tới
getrusage()để yêu cầu tài nguyên được sử dụng bởi các tiến trình con của tiến trình gọi vốn đã bị chấm dứt và đang chờ.
- resource.RUSAGE_BOTH¶
Chuyển tới
getrusage()để yêu cầu tài nguyên được tiêu thụ bởi cả quy trình hiện tại và quy trình con. Có thể không có sẵn trên tất cả các hệ thống.
- resource.RUSAGE_THREAD¶
Chuyển tới
getrusage()để yêu cầu tài nguyên được sử dụng bởi luồng hiện tại. Có thể không có sẵn trên tất cả các hệ thống.Added in version 3.2.