`
被触发
  • 浏览: 37040 次
文章分类
社区版块
存档分类
最新评论

因ulimit设置导致的MySQL故障

阅读更多

报错信息

 

Can't create a new thread (errno 11); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug

 

排查

 

用Google,Baidu搜索,都将问题指向了系统的ulimit设置.

(详情,可自行搜索)

 

分析与总结

 

疑问

 

如何查看当前系统或某个进程的limit设置?

limit如何设置?

limit设置后,何时生效?

proc文件系统

 

首先说明一下/proc文件系统,可以借助该目录下的limits文件查看某个进程的ulimit限制情况.

 

执行ps -ef|grep mysql,得到MySQL的进程号.

root     57461     1  0 22:09 pts/4    00:00:00 /bin/sh /home/q/mysql/bin/mysqld_safe --defaults-extra-file=/etc/my_3306.cnf

mysql    58327 57461  0 22:09 pts/4    00:00:00 /home/q/mysql/bin/mysqld --defaults-extra-file=/etc/my_3306.cnf --basedir=/home/q/mysql

再根据进程号,查看ulimit的限制情况.

[lianjie.ning@vm01 ~]$ sudo cat /proc/57461/limits

Limit                     Soft Limit           Hard Limit           Units

Max cpu time              unlimited            unlimited            seconds

Max file size             unlimited            unlimited            bytes

Max data size             unlimited            unlimited            bytes

Max stack size            10485760             unlimited            bytes

Max core file size        0                    unlimited            bytes

Max resident set          unlimited            unlimited            bytes

Max processes             1024                 unlimited            processes

Max open files            65535                65535                files

Max locked memory         65536                65536                bytes

Max address space         unlimited            unlimited            bytes

Max file locks            unlimited            unlimited            locks

Max pending signals       15841                15841                signals

Max msgqueue size         819200               819200               bytes

Max nice priority         0                    0

Max realtime priority     0                    0

Max realtime timeout      unlimited            unlimited            us

proc是什么

Linux版的ps和top命令都从/proc目录读取进程的状态信息,内核把有关系统状态的各种有意义的信息都放在这个伪目录里.

进程特有的信息都分别被放到了按PID起名字的子目录里.

ulimit命令

 

暂时认为该命令可以限制进程的资源使用情况.详细情况可参考man ulimit

配置文件

/etc/security/limits.conf (可配置系统默认的资源分配情况)

soft nofile 10240

hard nofile 40960

/etc/security/limits.d/90-nproc.conf (CentOS 6.2系统新增加的配置文件,可以指定用户可以使用的最大线程数.)

soft nproc 1024

3.     关于生效时间

修改上述两个配置文件,登录到root用户,可以用ulimit -a命令查看是否生效.

普通用户,则需要重启系统,或者直接在当前窗口指定,例如ulimit -u 65535,或者在/etc/profile,~/.bash_profile文件中指定.

例如:当前MySQL的最大线程数为1024,需要修改为65535.过程如下

a.     修改/etc/security/limits.d/90-nproc.conf配置文件

b.    用root用户重新登录

c.     查看ulimit –a,是否生效

d.    重启MySQL

分享到:
评论

相关推荐

    linux_ulimit的使用

    将虚拟内存大小设置为无限制,有助于避免因内存不足而导致的应用程序异常终止。 #### 配置文件及持久化设置 除了临时通过 `ulimit` 命令更改资源限制外,还可以通过编辑配置文件来实现更永久性的设置。 1. **...

    银河麒麟v10安装MySQL5.7 含教程

    配置MySQL的设置文件,通常位于解压后的目录下的`support-files`子目录。复制`my.cnf`示例配置文件到/etc/,并根据需求进行修改。 ``` sudo cp /usr/local/mysql/support-files/my.cnf /etc/my.cnf ``` 4. **...

    Mysql数据库安装

    为了防止MySQL服务占用过多资源导致系统不稳定,需要对MySQL用户及其进程的资源使用进行限制。 ```bash ulimit -f unlimited root ulimit -t unlimited root ulimit -v unlimited root ulimit -n 64000 root ulimit...

    mysql没法启动的解决办法

    MySQL的启动可能因配置文件`my.cnf`中的错误而失败。检查该文件,确保所有配置项正确无误,例如端口号、数据目录、用户权限等。如果发现错误,修正后重试启动。 3. **数据目录权限** 确保MySQL的数据目录具有正确...

    mysql双机安装部署文档

    - 编辑MySQL配置文件`/etc/my.cnf`,设置唯一server-id,并启用二进制日志。 - 示例配置: ```ini [mysqld] server-id=1 log-bin=mysql-bin ``` 2. **从服务器配置:** - 设置唯一的server-id,但与主...

    MySQL OOM(内存溢出)的解决思路

    - 检查MySQL配置文件(如`my.cnf`),确认是否设置了过大的内存分配值,导致MySQL占用过多内存。 - 考虑调整MySQL的配置参数,例如减小`query_cache_size`或限制临时表大小,以减少内存消耗。 3. **日志与监控**...

    39 案例实战:如何解决经典的Too many connections故障?背后原理是什么.pdf

    这通常是因为Linux的文件句柄限制导致MySQL的最大连接数受到了限制。 Linux系统中用于查看和修改文件句柄限制的命令是ulimit。这个命令可以限制进程对系统资源的使用。例如,ulimit -n 65535 命令可以设置每个进程...

    mysql数据库my.cnf配置文件

    # 该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。 binlog_cache_size = 1M # 一个事务,在没有提交的时候,产生的日志,记录到...

    mysql 二进制安装文档

    为了确保 MySQL 服务的稳定运行,需要设置 ulimit 参数。打开 /etc/security/limits.conf 文件,并添加以下内容: * soft nofile 65536 * hard nofile 131072 * soft nproc 65536 * hard nproc 131072 开始执行...

    MySQL运行环境建议规范.pdf

    - 调整系统允许的最大文件数,通过ulimit命令设置为65535,并将此值写入/etc/sysctl.conf文件,以确保重启后也能保持该设置。 - 修改IO调度器,对于传统硬盘设备,建议使用deadline调度器;对于SSD或PCIe-SSD设备...

    MySQL数据库CPU飙升及烂sql记录

    4. **资源限制检查**:检查操作系统设置,确保MySQL有足够的资源运行,如修改ulimit设置,提高文件描述符限制。 5. **定期维护**:定期进行数据库维护,如重建索引,清理无用数据,避免数据碎片。 6. **负载均衡与...

    Linux下MySQL数据库使用coredump注意事项

    在Linux环境下,MySQL数据库的使用过程中,遇到故障或者异常情况时,我们可能需要利用coredump来分析程序崩溃的原因。coredump是系统记录进程崩溃时内存状态的文件,它可以帮助开发者定位问题所在。以下是对在Linux...

    linux的最大进程句柄数设置

    但是,对于需要处理大量请求的应用,如 squid、mysql、java 等单进程,就需要调整系统参数,以适应应用变化。 使用 ulimit -n 命令可以查看单个进程能够打开的最大文件句柄数量。系统默认值 1024,对于一般的应用来...

    MySQL中my.cnf文件选项

    该文件通常包含了MySQL服务器启动时所遵循的各种参数设置,包括但不限于内存分配、缓存大小、日志记录以及安全设置等。通过对`my.cnf`文件的深入理解与合理配置,可以极大提升MySQL数据库系统的性能和稳定性。 ####...

    ulimit设置句柄数

    放到服务器上运行一段时间抛出Toomanyopenfiles的...  异常信息简单的信息如下:  I/Oexception(java.net.SocketException)caughtwhenprocessingrequest:Toomanyopenfiles  大致了解下,是文件句柄数设置太低导致

    ansible-ulimit:有助于管理 ulimit 配置的角色

    有助于管理ulimit配置的角色。 例子 --- # Example of how to use the role - hosts: myhost vars: ulimit_config: - domain: '*' type: soft item: core value: 0 - domain: '*' type: hard item: rss ...

    mysql的最大连接数修改方法_默认是100, 最大可以达到16384

    首先,我们要了解`max_connections`参数,这是MySQL配置文件(通常是my.cnf或my.ini)中的一个关键设置。要增大最大连接数,你需要编辑这个文件,并在`[mysqld]`部分添加或修改以下行: ```ini max_connections = ...

    用MySQL开启core文件.pdf

    本文将详细介绍如何在MySQL出现问题时,启用core文件并进行故障排查。 首先,开启Linux系统的core文件生成功能至关重要。默认情况下,Linux可能不会自动创建core文件。可以使用`ulimit -c unlimited`命令在当前...

    mysql数据库测试报告

    - 当MySQL服务提供长连接且需要支持更多并发连接时,需要同时增加`max_connections`设置和`ulimit–u`的值。 - 如果`ulimit–u`值太低,可能会出现错误提示“Can'tcreateanewthread(errno11)”;此时需要增加`...

    elasticbeanstalk-docker-ulimit-example:更新 ulimit 设置的示例 Elastic Beanstalk Docker 项目

    使用以下 ebextensions 配置更新 ulimit 设置的示例 Elastic Beanstalk Docker 项目: files: "/etc/security/limits.conf": mode: "00644" owner: "root" group: "root" content: | * hard nofile 65536 ...

Global site tag (gtag.js) - Google Analytics