我们有两台ubuntu 8.04服务器。对于数据库服务器,我将table_cache设置为1000,但是当重新启动mysql时,状态仅显示为257,打开的文件限制为1024。
我通过执行ulimit -n 8192,然后重新启动mysql来调整ulimit;这似乎可以完成这个操作,但是几个小时后,我做了-n,并看到它返回到1024。
有点担心。
我编辑了/etc/security/limits.conf s.conf并添加了
mysql soft nofile 8192
mysql hard nofile 8192
然后重新启动,没有改变。然后,我编辑并将mysql更改为*重新启动,没有更改,然后编辑并将其更改为一行。
* - nofile 8192
重新启动,没有改变。
cat /proc/sys/fs/file-max给我768730
sysctl fs.file-max给了我fs.file-max = 768730
我有点不知所措,不知道如何设置和保留ulimit值集,以便在mysql上适当地增加表缓存。
发布于 2009-12-11 01:13:12
编辑:为清晰性解释详细信息
我怀疑您检查了与mysql不同的用户的ulimit ;)
您不必在更改limits.conf之后重新启动。您必须在/etc/pam.d/中相应的PAM服务中打开该文件的使用。
做grep pam_limits /etc/pam.d/*,有线索,在什么情况下将使用limits.conf。
例如,limits.conf中的更改可以在作为sudo -u user bash调用的shell中看到,但在以sudo su - user的形式运行时却不能看到--这是因为在Ubuntu的默认设置中如下所示:
$ grep limits /etc/pam.d/*|grep su
/etc/pam.d/su:# session required pam_limits.so
/etc/pam.d/sudo:session required pam_limits.so
所以如果使用sudo su - mysql检查限制,那么就会出现混乱-- su没有打开限制。您可以通过查看/var/log/auth.log来检查哪个pam服务正在运行。
对于所有可能的mysql调用类型,修改pam.d/other或只修改pam.d/common-session应该是安全的。
发布于 2010-09-06 09:24:15
如果您不确定MySQL的当前限制,请使用您选择的方法(top、ps aux、pgrep等)检查mysqld的当前进程id。然后只需键入
sudo cat /proc/mysql_process_id_you_found/limits
如果它没有告诉您打开的文件是8192,那么您总是可以像有人建议的那样对init脚本进行黑客攻击。
发布于 2009-12-11 01:15:28
您是否将所需的会话pam_limits.so添加到/etc/pam.d/公共会话中?
https://serverfault.com/questions/93234
复制相似问题