我的 CentOS 服务器运行缓慢,htop 显示大约 40 行,我认为这是导致问题的原因:
27218 mysql 20 0 17.7G 7449M 5088 S 0.0 46.8 0:00.24 /usr/libexec/mysqld /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql/ --user=mysql --log-error=/var/log/mysqld.log --open-files-limit=102400 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
服务器有 16 GB 的 RAM,其中 17.7G 为红色。打开文件数限制之前为 65535,因此我将其增加到 102400,但使用更高的数字仍显示相同的错误。
有人能告诉我如何开始调试吗?我检查了 mysqld.log,没有与此相关的内容,似乎错误是无法写入日志文件?
答案1
我猜测有 2 个问题:
您的系统已将 mysqld 用户守护进程的打开文件数限制为默认的 1024 个。请将其设置为更大的值,然后重新启动 mysqld:
echo "mysql soft nofile 65536" >> /etc/security/limits.conf echo "mysql hard nofile 102400" >> /etc/security/limits.conf
您的 innodb_buffer_pool_size 对于您的有线内存来说太大:
编辑 my.cnf 并检查该值。也许可以尝试 50-60% 的有线内存。其他设置(例如每个线程的缓冲区大小)将影响该值,尤其是在有大量连接/会话的情况下。
innodb_buffer_pool_size=8G
不太可能 - 使用以下命令检查系统范围内的打开文件限制:
cat /proc/sys/fs/file-max
您可以在 /etc/sysctl.conf 中使用以下值进行设置,例如:
fs.file-max = 204800
然后使用以下命令加载 sysctl 更改:
sysctl -p
答案2
需要注意的统计数据是 46.8% 的内存占用,这表明物理内存使用率很高。17.7G 包括交换空间,因此可能不具指示性。如果系统限制已经是 65535,将打开文件限制增加到 102400 可能没有帮助。
我在测试服务器(centOS7 + VPS 上的 WHM/cPanel 构建)上看到了类似/重复的行。测试应用程序在 10-20% 的内存使用率下运行正常,但性能仍然很快。