Cách tìm ulimit cho người dùng trên Linux

Làm cách nào có thể tìm được giá trị ulimit cho một tài khoản user hoặc một tiến trình trên hệ thống Linux?

Để hoạt động đúng, chúng ta phải đảm bảo rằng các giá trị ulimit chính xác được thiết lập sau khi cài đặt các phần mềm khác nhau. Hệ thống Linux cung cấp các phương tiện để hạn chế số lượng tài nguyên được sử dụng. Mỗi tài khoản người dùng Linux sẽ được đặt những limit (giới hạn) khác nhau. Hệ thống limit được áp dụng riêng cho từng tiến trình của mỗi người dùng. Ví dụ, nếu ngưỡng nhất định quá thấp, hệ thống không thể lưu trữ các trang web bằng cách sử dụng các app Nginx/Apache hoặc PHP/Python. Giới hạn tài nguyên hệ thống được xem hoặc đặt bằng lệnh NA. Hãy cùng tìm hiểu xem làm thế nào để sử dụng ulimit cung cấp quyền kiểm soát các tài nguyên có sẵn cho shell và các tiến trình.

Các giá trị ulimit trên Linux
Các giá trị ulimit trên Linux

Cách tìm ulimit cho người dùng trên Linux

Lệnh ulimit Linux đặt hoặc hiển thị giới hạn tài nguyên tiến trình người dùng. Thông thường, các giới hạn được tìm thấy trong tệp /etc/security/limits.conf hoặc systemd.

Hai loại giới hạn

Tất cả các giới hạn Linux đều được chia làm hai loại:

  • Soft limit: Tất cả người dùng có thể thay đổi soft limit, tối đa theo hard limit. Đổi sang -S cho ulimit.
  • Hard limit: Chỉ root user mới được phép thay đổi hard limit. Đổi sang -H cho ulimit.

Xem các ulimit cho tài khoản người dùng của Linux

Nhập lệnh sau để xem tất cả các soft và hard limit cho người dùng hiện tại:

ulimit -Sa ## Show soft limit ##
ulimit -Ha ## Show hard limit ##
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 126787
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1048576
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) 126787
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Liệt kê tất cả các hard ulimit cho người dùng tên ‘tom’

Bạn phải chạy lệnh sau với tư cách là root user hoặc ít nhất có quyền truy cập vào tài khoản đó thông qua sudo/su:

su - tom -c "ulimit -Ha"
su - tom --shell /bin/bash -c "ulimit -Ha"

## You can use the sudo command ##
sudo -u tom bash -c "ulimit -Ha"
sudo -u tom sh -c "ulimit -Ha"

Tìm tất cả các soft ulimit cho người dùng tên ‘jerry’

Làm như trên một lần nữa:

su - jerry -c "ulimit -Sa"
su - jerry --shell /bin/sh -c "ulimit -Sa"

## You can use the sudo command ##
sudo -u jerry bash -c "ulimit -Sa"
sudo -u jerry sh -c "ulimit -Sa"

Tìm kiếm “ulimit-a” cho process user

Một tiến trình Linux là phiên bản đang chạy của một chương trình. Ví dụ, khi bạn khởi động ứng dụng Firefox, bạn đã tạo một tiến trình. Tuy nhiên, một số tiến trình đã chạy nền trong hệ thống khá lâu. Thông thường, với tiến trình chạy nền, bạn không thể sử dụng lệnh sudo hoặc su để tìm limit của chúng. Ở đây, nginx đang chạy như www-data user trên Debian Linux, nhưng shell bị chặn truy cập vào tài khoản www-data user theo mặc định vì lý do bảo mật. Nói cách khác, lệnh su/sudo sau đây sẽ thất bại 100%.

$ su - www-data -c "ulimit -Sa"
This account is currently not available.

Cách tìm ulimit cho một tiến trình

Công thức:

cat /proc/PID/limits

Trước tiên hãy tìm PID (ID tiến trình) cho nginx, chạy lệnh ps cùng với lệnh grep:

ps aux | grep nginx

Kết quả ví dụ:

root        8868  0.0  0.0 127044 24048 ?        Ss   May23   0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data   18074  0.0  0.0 127276 24716 ?        S    May23   0:09 nginx: worker process
www-data   18075  0.0  0.0 127276 22284 ?        S    May23   0:00 nginx: worker process

Bây giờ gõ lệnh cat:

cat /proc/8868/limits

Kết quả ví dụ:

Limit                    Soft Limit          Hard Limit          Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             unlimited            unlimited            processes 
Max open files            1024                 1048576              files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       385944               385944               signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us    

Hầu hết các lập trình viên và sysadmin cần biết số lượng tiến trình tối đa và các file mở trên mỗi tiến trình nginx. Tóm lại, chúng ta tìm thấy PID bằng cách sử dụng ”ps aux | grep appname”, sau đó tìm những file “limits” của PID đó trong tệp /proc/. Sau đó, bạn sẽ biết chắc chắn những giá trị nào nên áp dụng để điều chỉnh hiệu suất.

Chủ Nhật, 28/06/2020 08:25
31 👨 1.410
0 Bình luận
Sắp xếp theo
    ❖ Linux