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

12:02 Chiều - 19/06/2020
0 Bình luận
153
bởi Phương Trần

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.

Theo: Nguyễn Thanh An

Nguồn: quantrimang.com

Tags:

*
*

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.

Scroll Top