ตั้งค่า ulimit เริ่มต้นไว้ที่ใด (linux, centos)


34

ฉันมีเซิร์ฟเวอร์ CentOS 5 สองตัวที่มีสเปคใกล้เคียงกัน เมื่อฉันเข้าสู่ระบบและทำulimit -uบนเครื่องหนึ่งที่ผมได้รับและที่ฉันได้รับอื่นunlimited77824

เมื่อฉันทำงาน cron เช่น:

* * * * * ulimit -u > ulimit.txt

ฉันได้รับผลลัพธ์เดียวกัน ( unlimited, 77824)

ฉันกำลังพยายามที่จะกำหนดว่าสิ่งเหล่านี้จะถูกตั้งค่าเพื่อให้ฉันสามารถเปลี่ยนพวกเขา พวกเขาจะไม่ตั้งอยู่ในใด ๆ ของโปรไฟล์ของฉัน ( .bashrc, /etc/profileฯลฯ ) สิ่งเหล่านี้จะไม่ส่งผลกระทบต่อ cron) หรือใน/etc/security/limits.conf(ซึ่งว่างเปล่า)

ฉันขัดถู google และแม้กระทั่งไปไกลเท่าที่จะทำgrep -Ir 77824 /แต่ไม่มีอะไรปรากฏขึ้นจนถึงตอนนี้ ฉันไม่เข้าใจว่าเครื่องเหล่านี้อาจมีข้อ จำกัด ที่แตกต่างกันได้อย่างไร

จริง ๆ แล้วฉันไม่ได้สงสัยสำหรับเครื่องเหล่านี้ แต่สำหรับเครื่องที่แตกต่างกัน (CentOS 6) ซึ่งมีขีด จำกัด1024ซึ่งเล็กเกินไป ฉันต้องการเรียกใช้งาน cron ด้วยขีด จำกัด ที่สูงขึ้นและวิธีเดียวที่ฉันรู้วิธีการตั้งค่าที่อยู่ในงาน cron เอง ไม่เป็นไร แต่ฉันอยากจะตั้งระบบให้กว้างดังนั้นมันจึงไม่แฮ็ค

ขอบคุณสำหรับความช่วยเหลือใด ๆ ดูเหมือนว่ามันควรจะง่าย (ไม่)


แก้ไข - แก้ไขแล้ว

ตกลงฉันคิดออก ดูเหมือนว่าจะมีปัญหากับ CentOS 6 หรือบางทีการกำหนดค่าเครื่องของฉัน ในการกำหนดค่า CentOS 5 ฉันสามารถตั้งค่าใน/etc/security/limits.conf:

* - nproc unlimited

และนั่นจะปรับปรุงบัญชีและขีด จำกัด cron อย่างมีประสิทธิภาพ อย่างไรก็ตามสิ่งนี้ไม่สามารถใช้ได้ในกล่อง CentOS 6 ของฉัน แต่ฉันต้องทำ:

myname1 - nproc unlimited
myname2 - nproc unlimited
...

และสิ่งต่าง ๆ ทำงานตามที่คาดไว้ บางทีสเปค UID นั้นใช้งานได้ แต่ไวด์การ์ด (*) ไม่ได้อยู่ที่นี่แน่นอน อักขระ wildcard ทำงานได้nofileไม่เกินขีด จำกัด

ฉันยังคงอยากทราบว่าค่าเริ่มต้นมาจากไหนเพราะโดยค่าเริ่มต้นไฟล์นี้ว่างเปล่าและฉันไม่เห็นสาเหตุที่ฉันมีค่าเริ่มต้นที่แตกต่างกันสำหรับกล่อง CentOS สองกล่องซึ่งมีฮาร์ดแวร์เหมือนกันและมาจากผู้ให้บริการเดียวกัน .


3
คุณมีอะไร/etc/security/limits.d/มั้ย
Patrick

ไม่ dir นั้นว่างเปล่า
nomercysir

1
คุณสามารถโพสต์คำตอบเป็นคำตอบจริงหลังจากช่วงเวลารอคอยที่แน่นอน
sysadmin1138

2
ฉันเคยค้นหาสิ่งนี้ที่ไหนสักแห่ง ค่าเริ่มต้นถูกตั้งค่าโดยเคอร์เนล ฮาร์ดโค้ดบางส่วนขึ้นอยู่กับแรมที่มีอยู่ ฉันคิดว่าฉันพบว่าใน Oracle Metalink ในบริบทของการตั้งค่า SLES10 สำหรับ Oracle-DB 11.2
Nils

1
ทำเครื่องหมายคำถามนี้ว่าแก้ปัญหาแล้วหรือยัง?

คำตอบ:


45

ข้อ จำกัด "เริ่มต้น" เหล่านี้ถูกนำไปใช้โดย:

  • ลินุกซ์เคอร์เนลที่เวลาบูต (กับinitกระบวนการ)
  • การสืบทอดจากข้อ จำกัด ของกระบวนการหลัก (ในfork(2)เวลา)
  • PAM เมื่อเปิดเซสชันผู้ใช้ (สามารถแทนที่เคอร์เนล / ค่าที่สืบทอด)
  • กระบวนการตัวเอง (สามารถแทนที่ PAM & เคอร์เนล / ค่าสืบทอดมาให้ดูsetrlimit(2))

กระบวนการของผู้ใช้ปกติไม่สามารถเพิ่มขีด จำกัด ได้ยาก

เคอร์เนล Linux

ณ เวลาบูตลีนุกซ์ตั้งค่า จำกัด เริ่มต้นให้กับinitกระบวนการซึ่งสืบทอดจากกระบวนการอื่น ๆ (ลูก) ทั้งหมด หากต้องการดูข้อ จำกัด cat /proc/1/limitsเหล่านี้:

ตัวอย่างเช่นค่าเริ่มต้นเคอร์เนลสำหรับจำนวนสูงสุดของ file descriptors ( ulimit -n) คือ 1024/1024 (soft, hard) และถูกยกระดับเป็น 1024/4096 ใน Linux 2.6.39

จำนวนสูงสุดของกระบวนการเริ่มต้นที่คุณพูดถึงนั้น จำกัด อยู่ที่ประมาณ:

Total RAM in kB / 128

สำหรับ x86 สถาปัตยกรรม (อย่างน้อย) แต่บางครั้งการแจกแจงค่าเคอร์เนลการเปลี่ยนแปลงค่าเริ่มต้นเพื่อตรวจสอบซอร์สโค้ดเคอร์เนลของคุณสำหรับ,kernel/fork.c fork_init()ขีด จำกัด "จำนวนกระบวนการ" เรียกว่า RLIMIT_NPROC

PAM

โดยปกติเพื่อให้การรับรองความถูกต้องของผู้ใช้ในการเข้าสู่ระบบ PAM ถูกนำมาใช้พร้อมกับบางโมดูล (ดู/etc/pam.d/login)

ใน Debian โมดูล PAM ที่รับผิดชอบในการตั้งค่าขีด จำกัด /lib/security/pam_limits.soอยู่ที่นี่:

ไลบรารีนี้จะอ่านการกำหนดค่าจาก/etc/security/limits.confและ/etc/security/limits.d/*.confแม้ว่าไฟล์เหล่านั้นจะว่างเปล่าpam_limits.so อาจใช้ค่าฮาร์ดโค้ดที่คุณสามารถตรวจสอบได้ในซอร์สโค้ด

ตัวอย่างเช่นบน Debian ไลบรารีได้รับการแก้ไขเพื่อให้ตามค่าเริ่มต้นจำนวนสูงสุดของกระบวนการ ( nproc) ไม่ จำกัด และจำนวนไฟล์สูงสุด ( nofile) คือ 1024/1024:

  case RLIMIT_NOFILE:
      pl->limits[i].limit.rlim_cur = 1024;
      pl->limits[i].limit.rlim_max = 1024;

ดังนั้นตรวจสอบซอร์สโค้ด PAM ของโมดูล CentOS ของคุณ (มองหา RLIMIT_NPROC)

อย่างไรก็ตามโปรดทราบว่ากระบวนการหลายอย่างจะไม่ผ่าน PAM (โดยปกติหากไม่ได้เปิดใช้งานโดยผู้ใช้ที่เข้าสู่ระบบเช่น daemons และงาน cron)


จริง, นำจุด, ลบความคิดเห็นแล้ว ฉันเดาว่าฉันจะบอกว่าสำหรับผู้ใช้ส่วนใหญ่อาจเปิดใช้งาน PAM ดังนั้นฉันขอแนะนำให้ตรวจสอบไฟล์ /etc/security/limits.conf และ /etc/security/limits.d/* ก่อน ในอินสแตนซ์นี้โดยเฉพาะซึ่งฉันได้พบเจอมีข้อ จำกัด 1024 กระบวนการ / ผู้ใช้เธรดรวมที่กำหนดโดยค่าเริ่มต้นใน CentOS 6 ผ่านไฟล์ limit.d
rogerdpack

@rogerdpack ใช่เปิดใช้งาน PAM แน่นอน แต่อีกครั้งตามที่ฉันพูดในคำตอบของฉัน: "โปรดทราบว่ากระบวนการจำนวนมากจะไม่ผ่าน PAM (โดยปกติหากพวกเขาไม่ได้เปิดตัวโดยผู้ใช้ที่เข้าสู่ระบบเช่น daemons และ cron อาจ งาน)" การสนทนาของเราไม่มีมูลค่าเพิ่มดังนั้นหากคุณลบความคิดเห็นทั้งหมดของคุณฉันจะลบของฉัน ขอขอบคุณ.
Totor

กระจาย SuSE มีulimitแพคเกจที่ให้/etc/initscript- "สถานที่ที่สะดวกในการปรับกระบวนการต่อขีด จำกัด" /etc/sysconfig/ulimitกำหนดค่าผ่านทาง
sendmoreinfo

นอกจากนี้ไลบรารี Linux-PAM อ่านข้อ จำกัด ที่กำหนดโดยเคอร์เนล (เช่น/proc/1/limits) ตั้งแต่รุ่น 1.1.4 (เผยแพร่เมื่อ 2011)
sendmoreinfo

@sendmoreinfo และห้องสมุด Linux-PAM ทำอะไรกับข้อ จำกัด ที่กำหนดโดยเคอร์เนลนอกเหนือจากการอ่าน
2559

15

ใน RHEL6 (CentOS6) "กระบวนการผู้ใช้สูงสุด" ถูกตั้งค่าเป็น 1024 โดยค่าเริ่มต้น
คุณสามารถเปลี่ยนค่านี้ในไฟล์:

/etc/security/limits.d/90-nproc.conf

ดูhttps://bugzilla.redhat.com/show_bug.cgi?id=432903หากคุณต้องการบ่น :)


ฉันสงสัยว่าค่า 1024 สำหรับ nproc นี้ถูกต้องและผู้เขียนบอกว่า limit.d ของมันว่างเปล่าดังนั้นค่าเริ่มต้นจึงไม่ได้ถูกกำหนดไว้อย่างชัดเจน
Totor

Totor ไม่สามารถโต้เถียงกับคุณในทางเทคนิค แต่ Tom ฉันคิดว่ามันเป็นประโยชน์แล้วขอบคุณมาก!
เมฆบางส่วน

3

เมื่อคุณตรวจสอบข้อ จำกัด คุณใช้ผู้ใช้รูทเพื่อทำเช่นนั้นหรือไม่?

จากlimits.confmanpage:

หมายเหตุ: ข้อ จำกัด ของกลุ่มและไวด์การ์ดไม่ได้ใช้กับผู้ใช้รูท ในการตั้งค่าขีด จำกัด สำหรับผู้ใช้รูทฟิลด์นี้จะต้องมีชื่อผู้ใช้รูทตามตัวอักษร

การใช้ชื่อผู้ใช้อย่างชัดเจนจะแก้ไขปัญหาในกรณีนี้


ระวังนี่น่าจะเป็น"คุณสมบัติ" เฉพาะของเดเบียน
Totor

นอกจากนี้limits.confไฟล์ยังว่างเปล่า (เป็นlimits.dไดเรกทอรี)
Totor

3

ข้อมูลเกี่ยวกับสิ่งนี้เป็นสิ่งที่แย่มากบนอินเทอร์เน็ตไฟล์ที่ได้รับ จำกัด ฉันทำสำหรับ debian linux ซึ่งแสดงตัวเลือกที่เป็นไปได้ทั้งหมดและขีด จำกัด "ปลอดภัย" สูงสุดของพวกเขาบิดตาม

สิ่งเหล่านี้เป็นค่าสูงสุดที่คุณสามารถตั้งค่าได้บางสิ่งถูกแฮ็กการเปิดใช้งานสิ่งเหล่านี้ทำให้คุณเกิดข้อผิดพลาดและไม่สามารถลงชื่อเข้าใช้คอนโซลของคุณปรับเปลี่ยนตัวเลือกความคิดเห็นที่มีความเสี่ยงของคุณเอง ส่วนใหญ่)

ฉันหวังว่านี่จะเป็นประโยชน์กับบางคนเพราะฉันไม่สามารถหาข้อมูลนี้ได้ทุกที่มีการค้นคว้า 4 ชั่วโมงในไฟล์นี้

==== FILE START =====
# /etc/security/limits.conf
# 
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#- a user name
#- a group name, with @group syntax
#- the wildcard     *, for default entry
#- the wildcard %, can be also used with %group syntax,
#         for maxlogin limit
#- NOTE: group and wildcard limits are not applied to     root.
#  To apply a limit to the     root user, <domain> must be
#  the literal username     root.
#
#<type> can have the two values:
#- "soft" for enforcing the soft limits
#- "hard" for enforcing hard limits
#
#<item> can be one of the following:
#- core - limits the core file size (KB)
#- data - max data size (KB)
#- fsize - maximum filesize (KB)
#- memlock - max locked-in-memory address space (KB)
#- nofile - max number of open files
#- rss - max resident set size (KB)
#- stack - max stack size (KB)
#- cpu - max CPU time (MIN)
#- nproc - max number of processes
#- as - address space limit (KB)
#- maxlogins - max number of logins for this user
#- maxsyslogins - max number of logins on the system
#- priority - the priority to run user process with
#- locks - max number of file locks the user can hold
#- sigpending - max number of pending signals
#- msgqueue - max memory used by POSIX message queues (bytes)
#- nice - max nice priority allowed to raise to values: [-20, 19]
#- rtprio - max realtime priority
#- chroot - change     root to directory (Debian-specific)
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#root            hard    core            100000
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4

# -- Defaults:
#(core) core file size                (blocks, -c) 0 (ulimit -Hc or -Sc)
#(data) data seg size                  (bytes, -d) unlimited
#(priority) scheduling priority               (-e) 0
#(fsize) file size                    (blocks, -f) unlimited
#(sigpending) pending signals                 (-i) 378197
#(memlock) max locked memory          (kbytes, -l) 64
# max memory size                     (kbytes, -m) unlimited
#(nofile) open files                          (-n) 65536
# pipe size                        (512 bytes, -p) 8
#(msgqueue) POSIX message queues       (bytes, -q) 819200
#(rtprio) real-time priority                  (-r) 0
#(stack) stack size                   (kbytes, -s) 8192
#(cpu) cpu time                      (seconds, -t) unlimited
#(nproc) max user processes                   (-u) 378197
# virtual memory                      (kbytes, -v) unlimited
#(locks) file locks                           (-x) unlimited

# --     root Limits:
root               -    core            -1
root               -    data            -1
root               -    fsize           -1
root               -    memlock         -1
root               -    nofile          999999
root               -    stack           -1
root               -    cpu             -1
root               -    nproc           -1
root               -    priority        0
root               -    locks           -1
root               -    sigpending      -1
root               -    msgqueue        -1
root               -    rtprio          -1
root               -    maxlogins       -1
root               -    maxsyslogins    -1
#root               -    rss             -1
#root               -    as              -1
#root               -    nice            0
#root               -    chroot          -1

#All Users:
# -- Hard Limits
*               hard    core            -1
*               hard    data            -1
*               hard    fsize           -1
*               hard    memlock         -1
*               hard    nofile          999999
*               hard    stack           -1
*               hard    cpu             -1
*               hard    nproc           -1
*               hard    priority        0
*               hard    locks           -1
*               hard    sigpending      -1
*               hard    msgqueue        -1
*               hard    rtprio          -1
*               hard    maxlogins       -1
*               hard    maxsyslogins    -1
#*               hard    rss             -1
#*               hard    as              -1
#*               hard    nice            0
#*               hard    chroot          -1

# -- Soft Limits
*               soft    core            -1
*               soft    data            -1
*               soft    fsize           -1
*               soft    memlock         -1
*               soft    nofile          999999
*               soft    stack           -1
*               soft    cpu             -1
*               soft    nproc           -1
*               soft    priority        0
*               soft    locks           -1
*               soft    sigpending      -1
*               soft    msgqueue        -1
*               soft    maxlogins       -1
*               soft    maxsyslogins    -1
*               soft    rtprio          -1
#*               soft    rss             -1
#*               soft    as              -1
#*               soft    nice            0
#*               soft    chroot          -1

#randomuser:
# -- Soft Limits
randomuser           soft    core            -1
randomuser           soft    data            -1
randomuser           soft    fsize           -1
randomuser           soft    memlock         -1
randomuser           soft    nofile          999999
randomuser           soft    stack           -1
randomuser           soft    cpu             -1
randomuser           soft    nproc           -1
randomuser           soft    priority        0
randomuser           soft    locks           -1
randomuser           soft    sigpending      -1
randomuser           soft    msgqueue        -1
randomuser           soft    maxlogins       -1
randomuser           soft    maxsyslogins    -1
randomuser           soft    rtprio          -1
#randomuser           soft    rss             -1
#randomuser           soft    as              -1
#randomuser           soft    nice            0
#randomuser           soft    chroot          -1

# End of file

2

เคอร์เนล / fork.c

max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);

บนขนาดเธรด 64 บิตคือ 8192

 grep -i total /proc/meminfo 
 MemTotal:        8069352 kB

ตอนนี้ฉันได้ผลรวมเป็น kb หารด้วย 4

 echo $((8069352/4))
 2017338

ตอนนี้ฉันได้จำนวนหน้าแล้ว

 echo $((8 * 8192 / 4096)
 16

ผลสุดท้ายคือ

echo $((2017338/16))
126083

ด้วยวิธีนี้คุณจะได้รับพารามิเตอร์ thread-max และข้อ จำกัด ของกระบวนการผู้ใช้เริ่มต้นคือครึ่ง

init_task.signal->rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
init_task.signal->rlim[RLIMIT_NPROC].rlim_max = max_threads/2;

ulimit จากราก

ulimit -u
62932
echo $((62932*2))
125864 #we are near

1

ดูเหมือนว่าจะเป็น /etc/security/limits.conf

http://ss64.com/bash/limits.conf.html


1
ฉันพูดถึงว่าในโพสต์ของฉันแล้ว ไม่มีผลและไม่มีค่าเหล่านั้น (ไม่ จำกัด 77824) ที่ตั้งค่าไว้สำหรับเครื่องที่เกี่ยวข้อง (ไฟล์นั้นว่างเปล่า)
Nomercysir

โอ้ฉันเห็นคุณตรวจสอบ. bashrc ฯลฯ แต่ไม่เห็นคุณพูดถึงสิ่งนี้ด้วย
jamesbtate

1

มีความเป็นไปได้อีกอย่างหนึ่งที่การกำหนดค่าสำหรับ "noproc" ไม่ทำงานในขณะกำหนดค่าใน /etc/security/limits.conf

มีอีกหนึ่งไฟล์ที่แทนที่การกำหนดค่า /etc/security/limits.d/90-nproc.conf ของคุณ

* soft nproc 1024
รูทซอฟต์ nproc ไม่ จำกัด

ที่นี่ config * จะแทนที่สิ่งที่คุณตั้งไว้ในไฟล์กำหนดค่าก่อนหน้า ดังนั้นคุณควรกำหนดการตั้งค่าของคุณในไฟล์นี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.