针对系统中进程数原本可能设置过低,导致出现could not fork new process for connection: Resource temporarilyunavailable这一问题,本文介绍了增加进程数的方法,特别是针对greenplum数据库这种有多个主机的集群的批量操作方法,整个操作过程对数据库的正常运行无影响。
1,查看最大进程数的命令为ulimit -u,greenplum中用gpssh可以批量查看,现在最大进程数都是1024。
[gpadmin@mdw ~]$ gpssh -f host_file -v -e 'ulimit -u'
[Reset ...]
[INFO] login mdw
[INFO] login sdw2
[INFO] login sdw1
[ mdw] ulimit -u
[ mdw] 1024
[sdw2] ulimit -u
[sdw2] 1024
[sdw1] ulimit -u
[sdw1] 1024
[INFO] completed successfully
[Cleanup...]
2,本节尝试修改单独sdw1主机上的进程数,需要修改的文件是/etc/security/limits.conf,对于RedHat6.x系统还要修改/etc/security/limits.d/90-nproc.conf,可以直接用vi命令进入文本修改,此处是用sed命令来进行替换的。
[gpadmin@mdw ~]$ ssh sdw1
Last login: Sun Jun 21 13:15:55 2015 frommdw
[gpadmin@sdw1 ~]$cat /etc/security/limits.conf | grep nproc
# - nproc - max number of processes
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
* soft nproc 1024
* hard nproc 1024
[gpadmin@sdw1 ~]$ sed -i 's/nproc 1024/nproc 131072/g' /etc/security/limits.conf
sed: 无法打开临时文件/etc/security/sednH9P1U: 权限不够
--修改这两个文件需要root权限,替换时注意空格,并建议不要使用通配符,以免替换掉注释中的内容或关于root帐户的设定。
[gpadmin@sdw1 ~]$ su root
密码:
[root@sdw1 gpadmin]# sed -i 's/nproc 1024/nproc 131072/g' /etc/security/limits.conf
[root@sdw1 gpadmin]# cat /etc/security/limits.conf | grep nproc
# - nproc - max number of processes
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
* soft nproc 131072
* hard nproc 131072
[root@sdw1 gpadmin]# cat /etc/security/limits.d/90-nproc.conf | grep nproc
* soft nproc 1024
* hard nproc 1024
root soft nproc unlimited
[root@sdw1 gpadmin]# sed -i 's/nproc 1024/nproc 131072/g'/etc/security/limits.d/90-nproc.conf
[root@sdw1 gpadmin]# cat /etc/security/limits.d/90-nproc.conf | grep nproc
* soft nproc 131072
* hard nproc 131072
root soft nproc unlimited
[root@sdw1 gpadmin]# ulimit -u
1024
--修改后查看最大进程数是1024
[root@sdw1 gpadmin]# exit
exit
[gpadmin@sdw1 ~]$ ulimit -u
1024
--退回到gpadmin帐户查看最大进程数是1024
[gpadmin@sdw1 ~]$ su gpadmin
密码:
[gpadmin@sdw1 ~]$ulimit -u
131072
--但再登录gpadmin帐户查看最大进程数是131072,可见要使该修改生效,只要重新登入账户就行了。
3,在Greenplum数据库中可以用gpssh命令同时对多个主机的配置进行修改,过程与上面的大体类似。
[root@mdw gpadmin]# gpssh -f host_file
Note: command history unsupported on thismachine ...
=> cat /etc/security/limits.conf | grep nproc
[sdw1] # - nproc - max number of processes
[sdw1] #@student hard nproc 20
[sdw1] #@faculty soft nproc 20
[sdw1] #@faculty hard nproc 50
[sdw1] #ftp hard nproc 0
[sdw1] * soft nproc 131072
[sdw1] * hard nproc 131072
[sdw2] # - nproc - max number of processes
[sdw2] #@student hard nproc 20
[sdw2] #@faculty soft nproc 20
[sdw2] #@faculty hard nproc 50
[sdw2] #ftp hard nproc 0
[sdw2] * soft nproc 1024
[sdw2] * hard nproc 1024
[ mdw] # - nproc - max number of processes
[ mdw] #@student hard nproc 20
[ mdw] #@faculty soft nproc 20
[ mdw] #@faculty hard nproc 50
[ mdw] #ftp hard nproc 0
[ mdw] * soft nproc 1024
[ mdw] * hard nproc 1024
=> cat /etc/security/limits.d/90-nproc.conf | grep nproc
[sdw1] * soft nproc 131072
[sdw1] * hard nproc 131072
[sdw1] root soft nproc unlimited
[sdw2] * soft nproc 1024
[sdw2] * hard nproc 1024
[sdw2] root soft nproc unlimited
[ mdw] * soft nproc 1024
[ mdw] * hard nproc 1024
[ mdw] root soft nproc unlimited
=> sed -i's/nproc 1024/nproc 131072/g' /etc/security/limits.conf
[sdw1]
[sdw2]
[ mdw]
=> cat /etc/security/limits.conf | grep nproc
[sdw1] # - nproc - max number of processes
[sdw1] #@student hard nproc 20
[sdw1] #@faculty soft nproc 20
[sdw1] #@faculty hard nproc 50
[sdw1] #ftp hard nproc 0
[sdw1] * soft nproc 131072
[sdw1] * hard nproc 131072
[sdw2] # - nproc - max number of processes
[sdw2] #@student hard nproc 20
[sdw2] #@faculty soft nproc 20
[sdw2] #@faculty hard nproc 50
[sdw2] #ftp hard nproc 0
[sdw2] * soft nproc 131072
[sdw2] * hard nproc 131072
[ mdw] # - nproc - max number of processes
[ mdw] #@student hard nproc 20
[ mdw] #@faculty soft nproc 20
[ mdw] #@faculty hard nproc 50
[ mdw] #ftp hard nproc 0
[ mdw] * soft nproc 131072
[ mdw] * hard nproc 131072
=> sed -i's/nproc 1024/nproc 131072/g' /etc/security/limits.d/90-nproc.conf
[sdw1]
[sdw2]
[ mdw]
=> cat /etc/security/limits.d/90-nproc.conf | grep nproc
[sdw1] * soft nproc 131072
[sdw1] * hard nproc 131072
[sdw1] root soft nproc unlimited
[sdw2] * soft nproc 131072
[sdw2] * hard nproc 131072
[sdw2] root soft nproc unlimited
[ mdw] * soft nproc 131072
[ mdw] * hard nproc 131072
[ mdw] root soft nproc unlimited
=> quit
[root@mdw gpadmin]#su gpadmin
[gpadmin@mdw ~]$gpssh -f host_file -v -e 'ulimit -u'
[Reset ...]
[INFO] login sdw1
[INFO] login sdw2
[INFO] login mdw
[sdw1] ulimit -u
[sdw1] 131072
[sdw2] ulimit -u
[sdw2] 131072
[ mdw] ulimit -u
[ mdw] 131072
[INFO] completed successfully
[Cleanup...]
--所有主机上的都批量修改完毕。
4,最大进程数设置过低时的情况。当设置最大进程数为20后,对root帐户没有影响,正在连接使用中的普通帐户也可以正常使用,但无法登录其他帐户。
[root@sdw1 gpadmin]# sed -i 's/nproc 131072/nproc 20/g' /etc/security/limits.conf
[root@sdw1 gpadmin]# sed -i 's/nproc 131072/nproc 20/g'/etc/security/limits.d/90-nproc.conf
[root@sdw1 gpadmin]# su gpadmin
su: 无法设置用户ID: 资源暂时不可用
--无法登录gpadmin。
[root@sdw1 gpadmin]# exit
exit
--退回到gpadmin可以使用。
[gpadmin@sdw1 ~]$ulimit -u
131072
[gpadmin@sdw1 ~]$ ssh mdw
Last login: Sun Jun 21 13:44:11 2015 fromsdw1
[gpadmin@mdw ~]$ ssh sdw1
Write failed: Broken pipe
su: 无法设置用户ID: 资源暂时不可用
--但登出去后就回不来了。
5,原本以为需要切换登录才会让以上的修改生效,便写了一个让所有主机ssh切换登录的简单脚本,该脚本运行需安装expect的rpm包,有兴趣的可以看一下。
[gpadmin@mdw ~]$cat expect_ssh
#!/usr/bin/expect
set timeout 1 #每1秒切换登录一次
foreach ip { #列入要切换的主机名
sdw1
sdw2
} {
spawn ssh $ip
expect
spawn ssh mdw
expect
}
puts "finished\r"
exit
[gpadmin@mdw ~]$ expect expect_ssh
spawn ssh sdw1
Last login: Sun Jun 21 15:27:27 2015 frommdw
[gpadmin@sdw1 ~]$ spawn ssh mdw
Last login: Sun Jun 21 15:27:27 2015 frommdw
[gpadmin@mdw ~]$ spawn ssh sdw2
Last login: Sun Jun 21 15:27:27 2015 frommdw
[gpadmin@sdw2 ~]$ spawn ssh mdw
Last login: Sun Jun 21 15:29:11 2015 frommdw
[gpadmin@mdw ~]$ finished