Mac 命令行安装 dmg文件

1.安装dmg文件

hdiutil attach jdk-9.0.1_osx-x64_bin.dmg

会挂载在 /Volumes 目录下

2.安装pkg文件(可以 man installer 查看命令的参数)

sudo installer -pkg JDK\ 9.0.1.pkg -target /

3.卸载

卸载镜像:

hdiutil detach /Volumes/JDK\ 9.0.1/

卸载JDK:

sudo rm -rf /Library/Java/JavaVirtualMachines

APP的话一般安装在/Applications :

cd /Applications

rm -rf Google Chrome.app

企业主流MySQL高可用集群架构之PXC及常见问题解决

企业主流MySQL高可用集群架构之PXC

及Starting MySQL (Percona XtraDB Cluster)State transfer in progress, setting sleep higher
. ERROR! The server quit without updating PID file (/data/mysql/mysql.pid).问题解决。

https://github.com/walt008/AutoPXC

PXC是percona公司的percona xtraDB cluster.简称PXC。它是基于GaLera协议的高可用集群方案。可以实现多个节点间的数据同步复制以及读写,并且可保障数据库的服务高可用及数据强一致性

PXC 架构图:

 

 


三个节点都已经启动成功,这样在任意一个节点上面,执行一条DML语句的操作,都会同步到另外两个节点。

 

 

 

pxc就属于一套近乎完美的MySQL高可用集群架构方案;

优点总结:

  1. 可以达到时时同步,无延迟现象发生
  2. 完全兼容MySQL
  3. 对于集群中新节点的加入,维护起来很简单
  4. 数据的强一致性

不足之处总结:

  1. 只支持Innodb存储引擎
  2. 存在多节点update更新问题,也就是写放大问题
  3. 在线DDL语句,锁表问题
  4. sst针对新节点加入的传输代价过高的问题

实战过程:

环境介绍:系统是centos 7.4 1708 版本,理论上linux7以上适用

12

3

192.168.150.138  walt001192.168.150.139  walt002

192.168.150.143  walt003

 

安装之前的注意事项:

三台机器的防火墙iptables都要关闭,三台机器的server-id不能一样。

PXC软件包下载:

xtrabackup下载地址:

https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.6/binary/tarball/percona-xtrabackup-2.4.6-Linux-x86_64.tar.gz

Percona-XtraDB-Cluster 下载:

https://www.percona.com/downloads/Percona-XtraDB-Cluster-56/Percona-XtraDB-Cluster-5.6.26-25.12/binary/tarball/Percona-XtraDB-Cluster-5.6.26-rel74.0-25.12.1.Linux.x86_64.tar.gz

 

这里我下载的是:Percona-XtraDB-Cluster-5.6.26-rel74.0-25.12.1.Linux.x86_64

接下来三台机器上都需要针对基础软件包进行安装,使用yum安装即可,解决依赖性。

三台机器都需要操作的步骤:

  • 把IP和主机名写到hosts文件里(这个不是主要项,方便主机名解析而已,我没有完全一样的hosts结果也成功,不成功 不用在这里纠结)

[root@xxx]# cat /etc/hosts

192.168.150.138  walt001

192.168.150.139  walt002

192.168.150.143  walt003

 因为pxc本身包含mysql主程序,为防止端口占用删除多余数据库安装包

yum remove mariadb-* -y

安装依赖

yum install perl-IO-Socket-SSL.noarch perl-DBD-MySQL.x86_64 perl-Time-HiRes openssl openssl-devel socat -y

提前告诉你,如果系统是最小化安装事先做这两个软连接避免初始化报库文件缺失错误。

[root@xxx ~]# ln -sv /usr/lib64/libcrypto.so.10 /lib64/libcrypto.so.6

[root@xxx ~]# ln -sv /usr/lib64/libssl.so.10 /lib64/libssl.so.6

 

定位到解压目录 

[root@xxx ~]# cd /usr/local/

[root@xxx local]# tar xvf /rrot/percona-xtrabackup-2.4.6-Linux-x86_64.tar.gz 

[root@xxx local]# tar xv/root/Percona-XtraDB-Cluster-5.6.26-rel74.0-25.12.1.Linux.x86_64.tar.gz

建个软连接,方便使用

[root@xxx local]# ln -sv Percona-XtraDB-Cluster-5.6.26-rel74.0-25.12.1.Linux.x86_64 mysql

[root@xxx local]# useradd  -s /sbin/nologin mysql

[root@xxx local]# chown mysql.mysql -R mysql

[root@xxx local]# cp percona-xtrabackup-2.4.6-Linux-x86_64/bin/* mysql/bin/

[root@xxx local]# mkdir -p /data/mysql

[root@xxx local]# chown mysql.mysql -R /data/mysql/

先配置第一台机器,并成功启动后再配置其他两台

在第一台主机上创建配置文件:

创建配置文件:

[root@xxx local]# vim /etc/my.cnf

[mysqld]

datadir=/data/mysql

socket = /tmp/mysql.sock

pid-file=/data/mysql/mysql.pid

character_set_server = utf8

max_connections = 3000

back_log= 3000

skip-name-resolve

sync_binlog=0

innodb_flush_log_at_trx_commit=1

server-id = 1

#pxc主要配置项

default_storage_engine=Innodb

innodb_autoinc_lock_mode=2

binlog_format=row

wsrep_cluster_name=pxc_zs  #集群名称

wsrep_slave_threads=4   #开启的复制线程数,cpu核数*2

wsrep_cluster_address=gcomm://192.168.150.138,192.168.150.39,192.168.150.143 #集群所有服务器ip都加进来

wsrep_node_address=192.168.150.138 #本机ip

wsrep_provider=/usr/local/mysql/lib/libgalera_smm.so

wsrep_sst_method=xtrabackup-v2 

wsrep_sst_auth=sst:zs

 把这个文件写好了,传到其他两台机器的 /etc 下面,修改 server-id 和 wsrep_node_address

每个主机的server-id 和wsrep_node_address 保持不同即可

初始化数据:

/usr/local/mysql/scripts/mysql_install_db –basedir=/usr/local/mysql –datadir=/data/mysql/ –defaults-file=/etc/my.cnf –user=mysql

复制进程文件到系统服务目录,启动第一节点的服务:

[root@xxx local]#cd /usr/local/mysql/support-files

[root@xxx support-files]#cp mysql.server /etc/init.d/mysql

[root@xxx support-files]# /etc/init.d/mysql bootstrap-pxc

创建环境变量,让系统变量读到MySQL的路径:

[root@xxx opt]# echo “export PATH=$PATH:/usr/local/mysql/bin” > /etc/profile.d/mysql.sh && source /etc/profile.d/mysql.sh

登陆或者初始化的时候提示缺少库文件,find命令依次查找库文件做软连接到/lib64

[root@xxx ~]# find / -name “libreadline*”

/usr/lib64/libreadline.so.6

/usr/lib64/libreadline.so.6.2

[root@xxx ~]# ln -sv /usr/lib64/libreadline.so.6 /lib64/libreadline.so.5

[root@xxx ~]# ln -sv /usr/lib64/libcrypto.so.10 /lib64/libcrypto.so.6

[root@xxx ~]# ln -sv /usr/lib64/libssl.so.10 /lib64/libssl.so.6

 

启动成功之后,维护数据库环境并创建用户

进入数据库 ,默认密码是空的

#mysql -uroot -p

mysql> delete from mysql.user where user!=’root’ or host!=’localhost’;

mysql> grant all privileges on *.* to ‘sst‘@’%’ identified by ‘zs’;

mysql> grant all privileges on *.* to ‘sst’@’localhost’ identified by ‘zs’;

mysql> flush privileges;     #mysql 5.6以后这个命令可以不用,授权都是立即生效的

当第一个主节点成功启动,并创建了授权的用户后,开始配置其他的机器

安装步骤和上面相同,只要保证配置文件的server-id 和wsrep_node_address 不同即可

wsrep_node_address 填写当前机器的IP

启动命令和第一台不同,用下面的命令启动:

[root@xxx mysql]# /etc/init.d/mysql start

第二台动后查看集群状态:

在第一个机器上执行:

[root@xxx mysql]#mysql -v  #空密码的状态下这个命令可以直接登录mysql

mysql> show status like ‘wsrep%’;

注意:我一开始第二台怎么都启动不了,  刷日志发现一直连接超时,各种抓狂,然后试着远程连接mysql   失败,想到应该是被防火墙挡住了,出现开头那个报错。

#关闭selinux,防火墙打开pxc所需端口,或者取消注释直接关闭防火墙
sed -i s/”SELINUX=enforcing”/”SELINUX=disabled”/g  /etc/selinux/config #reboot后生效
setenforce 0  #临时关闭selinux
#systemctl stop firewalld
#systemctl disable firewalld
#iptables -F
firewall-cmd –zone=public –add-port=80/tcp –permanent
firewall-cmd –zone=public –add-port=3306/tcp –permanent
firewall-cmd –zone=public –add-port=4567/tcp –permanent
firewall-cmd –zone=public –add-port=4568/tcp –permanent
firewall-cmd –zone=public –add-port=4444/tcp –permanent
firewall-cmd –reload

生产环境还是添加端口为好,有硬件防火墙,直接关闭系统防火墙即可。

后面的第三台,第xx台就没什么问题了。集群创建成功后,执行 mysql_secure_installation 来安全初始化。

安全初始化如果报错(概率不大)可以尝试登录mysql执行:

set global wsrep_provider_options=”pc.bootstrap  = yes”;

当然在生产环境,我还是小心的配置了ip访问限制,安全才是王道。

注意:

全部关闭需要采用滚动关闭方式:

1.  关闭node1,修复完后,启动加回来;

2.  关闭node2,    修复完后,启动加回来;

3. ………………….,直到最后一个节点

4.  原则要保持Group里最少一个成员活着

数据库关闭之后,最会保存一个last Txid,所以启动时,先要启动最后一个关闭的节点,启动顺序和关闭顺序刚好相反。

wsrep_recover=on参数在启动时加入,用于从log中分析gtid。

怎样避免关闭和启动时数据丢失?

1. 所有的节点中最少有一个在线,进行滚动重启;

2. 利用主从的概念,把一个从节点转化成PXC里的节点。

pxc注意的问题

1. 脑裂

任何命令执行出现unkown command ,表示出现脑裂,集群两节点间4567端口连不通,无法提供对外服务。

SET GLOBAL wsrep_provider_options=”pc.ignore_sb=true”;

2. 并发写

三个节点的自增起始值为1、2、3,步长都为3,解决了insert问题,但update同时对一行操作就会有问题,出现:Error: 1213 SQLSTATE: 40001,所以更新和写入在一个节点上操作。

3. DDL

引起全局锁,采用:pt-online-schema-change

4. MyISAM引擎不能被复制,只支持innodb

5. pxc结构里面必须有主键

如果没有主建,有可能会造成集中每个节点的Data page里的数据不一样

6. 不支持表级锁

不支持lock /unlock tables

7. pxc里只能把slow log ,query log 放到File里
8. 不支持XA事务
9. 性能由集群中性能最差的节点决定

如果不幸PXC全部节点宕机,无法连接,那么先启动第一节点,后面的节点cd到mysql,data目录下:

如:

#cd /data.mysql

#rm -f gvwstate.dat

这样后面的节点就可以启动了。

vCenter 出现错误:503 Service Unavailable (Failed to connect to endpoint: [class Vmacore::Http::NamedPipeServiceSpec:0x0000000000425160] _serverNamespace = / action = Allow _pipeName =\\.\pipe\vmware-vpxd-webserver-pipe)

vCenter 出现错误:503 Service Unavailable (Failed to connect to endpoint: [class Vmacore::Http::NamedPipeServiceSpec:0x0000000000425160] _serverNamespace = / action = Allow _pipeName =\\.\pipe\vmware-vpxd-webserver-pipe)

重启vCenter的服务 VMware vCenter Configuration Service 即可(它会重启vm的其他相关服务)

 

wget 重试和超时参数设置

最近服务有问题,内存溢出,但服务的代码已经不在,无法让开发进行优化,前端进行了nginx负载,后端进行wget获取URL,失败时重启服务,但当服务出现问题时,发现重启没有自动重启,查看日志后发现wget一直进行重试操作,所以修改如下,

查看wget参数如下:

-t 设置重试次数。当连接中断(或超时)时,wget将试图重新连接。如果指
定-t0,则重试次数设为无穷多。

-T,–timeout=SECONDS 设置超时时间

linux修改max user processes limits

具体:
最近新上了一批服务器,内核升级到了2.6.32版本,部署完MySQL实例后上到线上,直接负载冲到15,cpu使用达到700%。

01:20:01 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-1503:50:01 PM        34      1506     22.95     18.11     11.7801:20:01 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle03: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是做什么用的呢?

core file size          (blocks, -c) 0data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0file size               (blocks, -f) unlimited
pending signals                 (-i) 514875max locked memory       (kbytes, -l) 64max memory size         (kbytes, -m) unlimited
open files                      (-n) 204800pipe size            (512 bytes, -p) 8POSIX message queues     (bytes, -q) 819200real-time priority              (-r) 0stack size              (kbytes, -s) 10240cpu time               (seconds, -t) unlimited
max user processes              (-u) 204800virtual 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
然后,在一台服务器上运行类似下面的脚本

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或者更大。对于提供短链接的服务,暂时并没有出现本次发现的错误。

修改:
不同内核参数的默认值也是不同的,请注意。

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

Linux对于每个用户,系统限制其最大进程数。为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程数

可以用ulimit -a 来显示当前的各种用户进程限制。
下面我把某linux用户的最大进程数设为10000个:
ulimit -u 10240
对于需要做许多 socket 连接并使它们处于打开状态的 Java 应用程序而言,
最好通过使用 ulimit -n xx 修改每个进程可打开的文件数,缺省值是 1024。
ulimit -n 4096 将每个进程可以打开的文件数目加大到4096,缺省为1024
其他建议设置成无限制(unlimited)的一些重要设置是:
数据段长度:ulimit -d unlimited
最大内存大小:ulimit -m unlimited
堆栈大小:ulimit -s unlimited
CPU 时间:ulimit -t unlimited
虚拟内存:ulimit -v unlimited

暂时地,适用于通过 ulimit 命令登录 shell 会话期间。
永久地,通过将一个相应的 ulimit 语句添加到由登录 shell 读取的文件中, 即特定于 shell 的用户资源文件,如:

1)、解除 Linux 系统的最大进程数和最大文件打开数限制:
vi /etc/security/limits.conf
# 添加如下的行
* soft noproc 11000
* hard noproc 11000
* soft nofile 4100
* hard nofile 4100
说明:* 代表针对所有用户,noproc 是代表最大进程数,nofile 是代表最大文件打开数
2)、让 SSH 接受 Login 程式的登入,方便在 ssh 客户端查看 ulimit -a 资源限制:
a、vi /etc/ssh/sshd_config
把 UserLogin 的值改为 yes,并把 # 注释去掉
b、重启 sshd 服务:
/etc/init.d/sshd restart
3)、修改所有 linux 用户的环境变量文件:
vi /etc/profile
ulimit -u 10000
ulimit -n 4096
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited

保存后运行#source /etc/profile 使其生效

/**************************************

有时候在程序里面需要打开多个文件,进行分析,系统一般默认数量是1024,(用ulimit -a可以看到)对于正常使用是够了,但是对于程序来讲,就太少了。
修改2个文件。

1./etc/security/limits.conf
vi /etc/security/limits.conf
加上:
* soft nofile 8192
* hard nofile 20480

2./etc/pam.d/login
session required /lib/security/pam_limits.so
/**********
另外确保/etc/pam.d/system-auth文件有下面内容
session required /lib/security/$ISA/pam_limits.so
这一行确保系统会执行这个限制。

/***********
3.一般用户的.bash_profile
#ulimit -n 1024
重新登陆ok
ulimit 的作用
=======================

ulimit:显示(或设置)用户可以使用的资源的限制(limit),这限制分为软限制(当前限制)和硬限制(上限),其中硬限制是软限制的上限值,应用程序在运行过程中使用的系统资源不超过相应的软限制,任何的超越都导致进程的终止。

参数 描述
ulimited 不限制用户可以使用的资源,但本设置对可打开的最大文件数(max open files)
和可同时运行的最大进程数(max user processes)无效
-a 列出所有当前资源极限
-c 设置core文件的最大值.单位:blocks
-d 设置一个进程的数据段的最大值.单位:kbytes
-f Shell 创建文件的文件大小的最大值,单位:blocks
-h 指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限,可以增大硬极限。任何用户均可减少硬极限
-l 可以锁住的物理内存的最大值
-m 可以使用的常驻内存的最大值,单位:kbytes
-n 每个进程可以同时打开的最大文件数
-p 设置管道的最大值,单位为block,1block=512bytes
-s 指定堆栈的最大值:单位:kbytes
-S 指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 -H 和 -S 标志均未指定,极限适用于以上二者
-t 指定每个进程所使用的秒数,单位:seconds
-u 可以运行的最大并发进程数
-v Shell可使用的最大的虚拟内存,单位:kbytes
-x

范例1:

[root@localhost proc]# ulimit -a
core file size (blocks, -c) 100
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
pending signals (-i) 2047
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 2047
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[root@localhost proc]#

输出的每一行由资源名字、(单位,ulimit命令的参数)、软限制组成。详细解释:
参数 描述
core file size core文件的最大值为100 blocks,
data seg size 进程的数据段可以任意大
file size 文件可以任意大
pending signals 最多有2047个待处理的信号
max locked memory 一个任务锁住的物理内存的最大值为32kB
max memory size 一个任务的常驻物理内存的最大值
open files 一个任务最多可以同时打开1024的文件
pipe size 管道的最大空间为4096字节
POSIX message queues POSIX的消息队列的最大值为819200字节
stack size 进程的栈的最大值为8192字节
cpu time 进程使用的CPU时间
max user processes 当前用户同时打开的进程(包括线程)的最大个数为2047
virtual memory 没有限制进程的最大地址空间
file locks 所能锁住的文件的最大个数没有限制

范例2:通过ulimit命令来限制文件的大小,从而导致拷贝命令的失败

[root@localhost]ls temp.txt
ls: temp.txt: 没有那个文件或目录
[root@localhost]ulimit -f 1 #设置创建文件的最大块(一块=512字节)
[root@localhost]cat a.c > temp.txt
文件大小超出限制

文件a.c的大小是5002字节,而我们设定的创建文件的大小是512字节x1块=512字节
———————
作者:奔跑-起点
来源:CSDN
原文:https://blog.csdn.net/bbaiggey/article/details/51004817
版权声明:本文为博主原创文章,转载请附上博文链接!

Centos6 修改max user processes limits

ulimit:显示(或设置)用户可以使用的资源的限制(limit),这限制分为软限制(当前限制)和硬限制(上限),其中硬限制是软限制的上限值,应用程序在运行过程中使用的系统资源不超过相应的软限制,任何的超越都导致进程的终止。

  1. 参数 描述
  2. ulimited 不限制用户可以使用的资源,但本设置对可打开的最大文件数(max open files
  3. 和可同时运行的最大进程数(max user processes)无效
  4. a 列出所有当前资源极限
  5. c 设置core文件的最大值.单位:blocks
  6. d 设置一个进程的数据段的最大值.单位:kbytes
  7. f Shell 创建文件的文件大小的最大值,单位:blocks
  8. h 指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限,可以增大硬极限。任何用户均可减少硬极限
  9. l 可以锁住的物理内存的最大值
  10. m 可以使用的常驻内存的最大值,单位:kbytes
  11. n 每个进程可以同时打开的最大文件数
  12. p 设置管道的最大值,单位为block1block=512bytes
  13. s 指定堆栈的最大值:单位:kbytes
  14. S 指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 H S 标志均未指定,极限适用于以上二者
  15. t 指定每个进程所使用的秒数,单位:seconds
  16. u 可以运行的最大并发进程数
  17. v Shell可使用的最大的虚拟内存,单位:kbytes
  18. x

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就会被限制再这个数值之内。

通过ulimit命令来限制文件的大小,从而导致拷贝命令的失败

  1. [root@localhost]ls temp.txt
  2. ls: temp.txt: 没有那个文件或目录
  3. [root@localhost]ulimit f #设置创建文件的最大块(一块=512字节)
  4. [root@localhost]cat a.c > temp.txt
  5. 文件大小超出限制

文件a.c的大小是5002字节,而我们设定的创建文件的大小是512字节x1块=512字节

修改ulimit的数值,只需要修改/etc/security/limits.conf即可,但是-u这个参数需要修改/etc/security/limits.d/90-nproc.conf。
至于为什么需要修改这里,请看褚霸的这篇blog:http://blog.yufeng.info/archives/2568

centos 6.*可以修改/etc/security/limits.d/90-nproc.conf
但centos 5.*并没有90-nproc.conf这个文件,修改/etc/security/limits.conf,在最后添加

  1. * soft nproc
  2. * hard nproc

这个参数需要在mysqld启动之前调整,如果mysqld已经启动,再动态调整是无效的。
动态调整的方法:

  1. echo n Max processes=SOFT_LIMITS:HARD_LIMITS > /proc/`pidof mysqld`/limits

通过如上命令就可以动态调整已经存在的mysqld的processes限制。

参考阿里云主机默认设置,修改/etc/security/limits.conf

  1. * soft nofile
  2. * hard nofile
  3. * soft nproc
  4. * hard nproc