前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux修改max user processes limits

linux修改max user processes limits

作者头像
明哥的运维笔记
发布2019-01-30 10:13:38
4.4K0
发布2019-01-30 10:13:38
举报
文章被收录于专栏:运维笔记运维笔记

说明: 这篇是网上看到的有关修改 max user processes limits,觉得还可以,就保留了下来!稍微加了点东西 具体: 最近新上了一批服务器,内核升级到了 2.6.32 版本,部署完 MySQL 实例后上到线上,直接负载冲到 15,cpu 使用达到 700%。

代码语言:javascript
复制
01:20:01 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
03:50:01 PM        34      1506     22.95     18.11     11.78

01:20:01 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
03:50:01 PM     all     95.13      0.00      3.31      0.06      0.00      1.49

当时就有点蒙,io 并不是瓶颈,业务也米有变更,线上的服务器都运行正常,为什么这台新机器就变成这个模样了呢? 最后才发现又是一个 ulimit 的坑啊,之前对于 ulimit -n 已经碰了多次头,这次又差点碰的头破血流,万幸灰度上了 1 台 slave,并没有影响到线上。 这次碰到的问题是 ulimit -u,这个 - u 是做什么用的呢?

代码语言:javascript
复制
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 514875
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 204800
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 204800
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

可以从上面看出,用来限制 max user processes 的数量的。 但是这个 user processes 是什么呢? Linux itself has a Max Processes per user limit. This feature allows us to control the number of processes an existing user on the server may be authorized to have 这个 ulimit -u 是用来限制每个用户的最大 processes 数量。如果 ulimit -u 进行了限制那么每个 linux 用户可以派生出来的 process 就会被限制再这个数值之内。 那么这个限制和 MySQL 有什么关系呢,我们看如下的测试。 测试: 首先,在一台服务器上启两个 MySQL 实例,分别限制 max connetcionts=1024 , ulimit -u=1024 然后,在一台服务器上运行类似下面的脚本

代码语言:javascript
复制
for i in `seq 1 2010`
do
    echo $i
    mysqlha_login.sh -h 10.77.7.56 -P 3306 -e'system sleep 60;' &
    mysqlha_login.sh -h 10.77.7.56 -P 3307 -e'system sleep 60;' &
done

当 i 的数值超过 1009 的时候就会出现如下报错 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 这就是无法再创建出新的 process 了。 如果我们将 ulimit -u 改为 10240,再进行一次测试呢? User myadmin already has more than ‘max_user_connections’ active connections 报错就变更为我们常见的超过最大连接数的报错了。 so,对于提供长链接的 MySQL 服务,建议都讲这个值调整为 10240 或者更大。对于提供短链接的服务,暂时并没有出现本次发现的错误。 修改: 不同内核参数的默认值也是不同的,请注意。

代码语言:javascript
复制
2.6.18
ore file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 139264
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 288000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
代码语言:javascript
复制
2.6.32
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 514875
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 204800
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

然后,一般来说,修改 ulimit 的数值,只需要修改 / etc/security/limits.conf 即可,但是这个参数需要修改 / etc/security/limits.d/90-nproc.conf。 至于为什么需要修改这里,请看褚霸的这篇 blog: 但是,还有一个问题,这个参数需要在 mysqld 启动之前调整,如果 mysqld 已经启动,再动态调整是无效的。(大家都知道 stop start mysql 是一件比较麻烦的事情,涉及线上业务就更麻烦了) 那么,有没有可以动态调整的方法呢? echo -n ‘Max processes=SOFT_LIMITS:HARD_LIMITS’ > /proc/pidof mysqld/limits 通过如上命令就可以动态调整已经存在的 mysqld 的 processes 限制了。 附录: 附录 1:centos 6. 可以修改 / etc/security/limits.d/90-nproc.conf 但,centos 5. 并没有 90-nproc.conf 这个文件,我这边是通过修改 / etc/security/limits.conf,在最后添加

  • soft nproc 65535
  • hard nproc 65535 来实现的
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档