มีกระบวนการ MySQL มากเกินไป


12

ฉันพยายามที่จะช่วยเพื่อนกับเซิร์ฟเวอร์ของเขาหลังจากที่เขาบอกฉันว่า MySQL ของเขาใช้หน่วยความจำมากเกินไป ... ปรากฎว่ามันไม่เพียง แต่ใช้หน่วยความจำจำนวนมาก แต่มีวิธี mysql ที่ทำงานมากเกินไป!

นี่คือผลลัพธ์ของps auxww|grep mysql: http://pastebin.com/kYrHLXVW

ดังนั้นโดยทั่วไปมีกระบวนการ MySQL 13 รายการและมีเพียง 1 ไคลเอ็นต์ที่เชื่อมต่อตาม mysqladmin ...

หลังจากผ่านไประยะหนึ่งกระบวนการเหล่านี้กินหน่วยความจำมากถึง 50mb ดังนั้นจึงสิ้นเปลืองหน่วยความจำมาก ...

ฉันใช้เทมเพลตการตั้งค่า my-medium.cnf ตรงจาก / usr / share / mysql ... ฉันรีสตาร์ทเซิร์ฟเวอร์ mysql แต่ทันทีที่เริ่มต้นกระบวนการ 13 กระบวนการจะกลับมา ... ฉันไม่รู้เลยว่า ปัญหาอาจจะเป็น ... ความคิด / ข้อเสนอแนะใด ๆ ที่จะได้รับการชื่นชมจริงๆ!

คำตอบ:


16
mysql     9804  0.0  0.6 58556 22960 pts/0   S    12:43   0:00  \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9807  0.0  0.6 58556 22960 pts/0   S    12:43   0:00      \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9808  0.0  0.6 58556 22960 pts/0   S    12:43   0:00          \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9809  0.0  0.6 58556 22960 pts/0   S    12:43   0:00          \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9810  0.0  0.6 58556 22960 pts/0   S    12:43   0:00          \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
[ ... repeated output truncated ... ]

พวกเขาไม่ได้ใช้ 13 50MB * แกะ - พวกเขาอาจจะใช้สิ่งที่ต้องการ 70MB รวม โปรดจำไว้ว่า linux นั้นจะแบ่งปันเพจหน่วยความจำที่ไม่ได้แก้ไขระหว่างกระบวนการดังนั้นหากเซิร์ฟเวอร์ของคุณเริ่มต้นใหม่โดยส่วนใหญ่หน่วยความจำนั้นจะถูกแชร์ทั้งหมด ในความเป็นจริงเนื่องจาก mysql เป็นเธรดอาจจะมีการจัดสรรหน่วยความจำน้อยลงต่อเธรดเท่านั้น หากคุณกังวลเกี่ยวกับการใช้หน่วยความจำของแต่ละกระบวนการ mysql ให้ดูที่/etc/mysql/my.cnfและดูตัวแปรในส่วน mysqld:

  • key_buffers
  • thread_stack
  • thread_cache_size
  • max_connections
  • query_cache_limit
  • query_cache_size

ได้รับการเตือนว่าเป็นตัวแปรที่มีประสิทธิภาพมากในการปรับแต่งและคุณสามารถฆ่าประสิทธิภาพการทำงานของ mysql ของคุณให้ต่ำเกินไปหรือหน่วยความจำเสียที่สามารถใช้งานที่อื่นได้โดยตั้งค่าไว้สูงเกินไป

จุดเริ่มต้นที่ง่ายอย่างหนึ่งในการหาวิธีที่ดีที่สุดในการปรับแต่งอินสแตนซ์ mysql ของคุณคือการเรียกใช้แอปของคุณสักเล็กน้อยจากนั้นเรียกใช้สคริปต์ mysqltune จากที่นี่ซึ่งจะวิเคราะห์เคาน์เตอร์วัดประสิทธิภาพของคุณ กำหนดค่าเซิร์ฟเวอร์ของคุณ


1
ฉันไม่รู้ว่าmysqltuneขอบคุณมากมีประโยชน์ นอกจากนี้หนึ่งสามารถใช้htopสีเธรดของเราและดูหน่วยความจำจริงที่ใช้ต่อกระบวนการ
mveroone

3

Linux แสดงเธรดเป็นกระบวนการแยกกัน MySQL เริ่มหนึ่งเธรดต่อการเชื่อมต่อ เล่นกับps fตัวอย่างเช่นps auxfwจะแสดงความเกี่ยวข้องของเธรด

มีการเชื่อมต่อกับ MySQL จำนวนเท่าใด? ทำงานshow full processlist;ในไคลเอนต์ MySQL จากสิ่งที่คุณแสดงฉันไม่มั่นใจด้วยซ้ำว่ามีอะไรผิดปกติ


นี่คือผลลัพธ์: pastebin.com/raw.php?i=XNCsG6KSเซิร์ฟเวอร์เพิ่งเริ่มทำงานไม่แน่ใจว่าช่วยได้หรือไม่ ... โดยสคริปต์ init คุณหมายถึงเนื้อหาของ /etc/init.d/mysql หรือไม่
24994

นั่นดูธรรมดามากสำหรับฉัน
วอร์เนอร์

ตามที่show full processlistมีการเชื่อมต่อ 2 กับฐานข้อมูล หนึ่งในนั้นคือ localhost กำลังดำเนินshow full processlistการอีกอันหนึ่งก็เป็นฉันเช่นกันผ่าน phpmyadmin ไม่ควรมีการเชื่อมต่อใด ๆ เพิ่มเติมเนื่องจากไซต์ยังไม่เผยแพร่ ...
user24994

จำนวนการเชื่อมต่อจะขึ้นอยู่กับว่าแอปพลิเคชันของคุณทำงานอย่างไรและไม่จำเป็นต้องเกี่ยวข้องกับปริมาณของผู้ใช้โดยตรง MySQL ใช้หน่วยความจำตามการตั้งค่า cnf อะไรทำให้คุณคิดว่ามันกำลังทำอะไรผิด
วอร์เนอร์

ขอโทษด้วยฉันเดาว่ามันไม่ชัดเจนในคำถามของฉันฮ่าฮ่าเป็นไปได้โดยสิ้นเชิงว่าไม่มีอะไรผิดพลาดเกิดขึ้น! ฉันเพิ่งสังเกตเห็นว่า mysql ใช้หน่วยความจำจำนวนมาก (ประมาณ 13 * 50mb ดังนั้น 650mb ของ ram) และไม่มีการรับส่งข้อมูลไปยังเว็บไซต์ ... ดังนั้นฉันเดาว่าคำถามของฉันจะมีมากขึ้น แทน "มีอะไรผิดปกติ" :)
24994

1

คุณอาจต้องการลองใช้งานMySQLTunerซึ่งฉันเห็นว่ามีประโยชน์มากมันจะแนะนำให้คุณทราบว่าควรปรับค่าตัวแปรตัวใด


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