ฉันมีระบบ FreeBSD 8 ที่รัน ZFS พร้อมกับเซิร์ฟเวอร์ MySQL 5.5 ซึ่งประมาณ 355GB และคาดว่าจะเติบโตเป็นเทราไบต์สองสามตัว
MySQL เรียกข้อผิดพลาดเกี่ยวกับ "ไฟล์ที่เปิดมากเกินไป" /etc/hosts.allow
บน เราไม่ได้ใช้อย่างชัดแจ้ง/etc/hosts.allow
แต่ใช้โดยhosts_access (3) ( libwrap.a
) ซึ่งใช้โดยหลายสิ่ง
mysqld[1234]: warning: /etc/hosts.allow, line 15: cannot open /etc/hosts.allow: Too many open files
แต่เมื่อฉันตรวจสอบ 'ดูเหมือนจะตีขีด จำกัด ใด ๆ ที่เกิดขึ้นจริง จำนวนไฟล์ที่เปิดอยู่ที่รายงานkern.openfiles stays
ต่ำกว่า 40,000 ในช่วงระยะเวลาที่ยั่งยืนและข้อ จำกัด ของเรานั้นสูงกว่ามาก:
# sysctl -a |grep files
kern.maxfiles: 204800
kern.maxfilesperproc: 184320
kern.openfiles: 38191
# ulimit -n
184320
Openfiles ควรถูกตั้งค่าเป็นไม่ จำกัด :
# grep openfiles /etc/login.conf
:openfiles=unlimited:\
MySQL บอกว่าควรจะสามารถเปิดตัวจัดการไฟล์ 184320 ได้:
# mysqladmin variables | grep open_files_limit
| open_files_limit | 184320 |
และข้อมูลบางอย่างจากมุมมองของผู้ใช้ MySQL ฉันหยุด mysql และแฮ็ก/usr/local/etc/rc.d/mysql-server
เพื่อพิมพ์ตัวแปรเหล่านี้ดังนั้นสิ่งนี้ควรเป็นตัวแทนของสภาพแวดล้อม MySQL โปรดทราบว่าหมายเลข 184320 สอดคล้องกับข้างต้น
# /usr/local/etc/rc.d/mysql-server.stefantest start
Starting mysql.
cpu time (seconds, -t) unlimited
file size (512-blocks, -f) unlimited
data seg size (kbytes, -d) 33554432
stack size (kbytes, -s) 524288
core file size (512-blocks, -c) unlimited
max memory size (kbytes, -m) unlimited
locked memory (kbytes, -l) unlimited
max user processes (-u) 5547
open files (-n) 184320
virtual mem size (kbytes, -v) unlimited
swap limit (kbytes, -w) unlimited
sbsize (bytes, -b) unlimited
pseudo-terminals (-p) unlimited
และสำหรับการอ้างอิงอย่างง่าย ๆ นี่คือคำอธิบายสำหรับ sysctls:
kern.maxfiles: Maximum number of files
kern.openfiles: System-wide number of open files
kern.maxfilesperproc: Maximum files allowed open per process
ที่เกี่ยวข้อง
- อาจเกี่ยวข้องกับ ZFS ในคำถาม Nexenta ใน ServerFault: ทำไม MySQL ไม่สามารถเปิด hosts.allow / hosts.deny
- ดูปัญหาที่คล้ายกันนี้ในฟอรัม FreeBSD ด้วย: [EMFILE] มีไฟล์เปิดมากเกินไป
ulimit
ในสคริปต์เริ่มต้นหรือสภาพแวดล้อมของเชลล์ แต่นั่นจะต้องให้ฉันขัดจังหวะฐานข้อมูล
cat limits
ดูว่า mysql ทำงานด้วยอะไร นอกจากนี้คุณยังสามารถเปลี่ยนพวกเขาได้ทันที (ด้วยเคอร์เนลรุ่นใหม่): echo -n "Max open files=soft_value:hard_value" > /proc/$PID/limits
(เป็นรากของหลักสูตร)
/proc
ไม่ได้ติดตั้งโดยค่าเริ่มต้นบน FreeBSD แต่ทำด้วยตัวเองsudo mount -t procfs proc /proc
ดูprocfs(5)
ข้อมูลเพิ่มเติม เมื่อคุณ/proc
ติดตั้งแล้วให้ดูที่/proc/$PID/rlimit
ไฟล์