Jul
13
今天碰到一个问题,NFS4.1的客户端在挂在服务器后,挂载目录下的文件及目录的uid和gid都变为4294967294,这应该是相当于-1的数。搜索了一下找到了几种解决的办法。
解决方法:安装pnfs-nfs-utils,据说有很多依赖的包要装,没有尝试,有兴趣的可以去试试是否可行。
网上有其他的解决办法:如
You need to change the /etc/default/nfs-common file (on both your server and client):
setNEED_IDMAPD to yes.
sometimes set client is ok.
不过在Cent OS 6.2的系统下没有找到这个文件,就不继续深究了。
有一种最简单的解决办法就是在NFS的客户端启动rpcidmapd服务,然后你再看挂载的目录用户和组都是对的了,前提是你挂载的那个磁盘目录所属的用户和组,客户端也有。
解决方法:安装pnfs-nfs-utils,据说有很多依赖的包要装,没有尝试,有兴趣的可以去试试是否可行。
网上有其他的解决办法:如
You need to change the /etc/default/nfs-common file (on both your server and client):
setNEED_IDMAPD to yes.
sometimes set client is ok.
不过在Cent OS 6.2的系统下没有找到这个文件,就不继续深究了。
有一种最简单的解决办法就是在NFS的客户端启动rpcidmapd服务,然后你再看挂载的目录用户和组都是对的了,前提是你挂载的那个磁盘目录所属的用户和组,客户端也有。
Jul
6
之前用centos 6.2做系统的时候没有发现网卡会变成em1,可能不是在服务器上装的,而且今天特意拿来一台台式机安装centos 6.2 系统,网卡接口依然是之前的eth0,但是在DELL服务器上安装同样的centos 6.2系统,网卡的接口却变成了em1-em4了,其实本来这也没有什么,只是一个网卡接口的名称而已,一般来说没有什么影响。
由于我们要使用LVS,环境配置完成后发现执行ipvsadm -ln,没有一台主机在线,连本机local都不在列表里
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.9.9:80 wrr persistent 3600
于是立即去拿网卡接口是eth0-eth3的服务器做测试,发现配置之后一切正常,两台机器除了网卡接口名称不一样之外其他的都一样,就想去试试把centos 6.2 网卡是em1-em4的服务器网卡接口给改回去看看,至于这个是不是ipvsadm的bug还不确定,现在也没有时间去考证这些东西,以后再研究,谷歌了一下找到了一些资料,感兴趣的可以去看看: http://fedoraproject.org/wiki/Features/ConsistentNetworkDeviceNaming,下面就开始操作啦:
第一步:修改系统grub
vi /boot/grub/grub.conf
增加一个 biosdevname=0 的启动参数,我修改的结果如下:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda2
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-220.17.1.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-220.17.1.el6.x86_64 ro root=UUID=41d8fd59-98cb-44fa-9cfb-065c104feaf0 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarc
yrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM biosdevname=0
initrd /initramfs-2.6.32-220.17.1.el6.x86_64.img
title CentOS (2.6.32-220.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=41d8fd59-98cb-44fa-9cfb-065c104feaf0 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb
-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM biosdevname=0
initrd /initramfs-2.6.32-220.el6.x86_64.img
添加的参数只有红色字体的那一段,然后保存文件
第二步:删除udev的配置文件rm -f /etc/udev/rules.d/70-persistent-net.rules
第三步:修改当前网卡配置文件的名称
mv ifcfg-em1 ifcfg-eth0
mv ifcfg-em2 ifcfg-eth1
mv ifcfg-em3 ifcfg-eth2
mv ifcfg-em4 ifcfg-eth3
第四步:修改网卡配置文件内容,把em1全部修改改为eth0
修改之前:
DEVICE="em1"
NM_CONTROLLED="yes"
ONBOOT=yes
HWADDR=D4:AE:52:6A:8F:76
TYPE=Ethernet
BOOTPROTO=none
IPADDR=114.X.X.X
GATEWAY=114.X.X.X
NETMAKS=255.255.255.224
DNS1=202.106.0.20
DNS2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
修改之后:
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT=yes
HWADDR=D4:AE:52:6A:8F:76
TYPE=Ethernet
BOOTPROTO=none
IPADDR=114.X.X.X
GATEWAY=114.X.X.X
NETMAKS=255.255.255.224
DNS1=202.106.0.20
DNS2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
可以使用 perl -p -i -e 's/em1/eth0/g' ifcfg-eth0 或sed -i 's/em1/eth0/g' ifcfg-eth0 进行替换。
最后一步:重新启动系统 init 6 启动之后你就发现熟悉的eth0-eth4已经回来啦,顺便说下centos 6.2 还有一个问题就是如果你没有在网卡配置文件里写dns的话,重启之后你就会发现 /etc/resolv.conf 文件被清空了,一个方法就是在网卡配置文件中写DNS,另一个方法就是给/etc/resolv.conf加i属性,chattr +i /etc/resolv.conf
由于我们要使用LVS,环境配置完成后发现执行ipvsadm -ln,没有一台主机在线,连本机local都不在列表里
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.9.9:80 wrr persistent 3600
于是立即去拿网卡接口是eth0-eth3的服务器做测试,发现配置之后一切正常,两台机器除了网卡接口名称不一样之外其他的都一样,就想去试试把centos 6.2 网卡是em1-em4的服务器网卡接口给改回去看看,至于这个是不是ipvsadm的bug还不确定,现在也没有时间去考证这些东西,以后再研究,谷歌了一下找到了一些资料,感兴趣的可以去看看: http://fedoraproject.org/wiki/Features/ConsistentNetworkDeviceNaming,下面就开始操作啦:
第一步:修改系统grub
vi /boot/grub/grub.conf
增加一个 biosdevname=0 的启动参数,我修改的结果如下:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda2
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-220.17.1.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-220.17.1.el6.x86_64 ro root=UUID=41d8fd59-98cb-44fa-9cfb-065c104feaf0 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarc
yrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM biosdevname=0
initrd /initramfs-2.6.32-220.17.1.el6.x86_64.img
title CentOS (2.6.32-220.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=41d8fd59-98cb-44fa-9cfb-065c104feaf0 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb
-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM biosdevname=0
initrd /initramfs-2.6.32-220.el6.x86_64.img
添加的参数只有红色字体的那一段,然后保存文件
第二步:删除udev的配置文件rm -f /etc/udev/rules.d/70-persistent-net.rules
第三步:修改当前网卡配置文件的名称
mv ifcfg-em1 ifcfg-eth0
mv ifcfg-em2 ifcfg-eth1
mv ifcfg-em3 ifcfg-eth2
mv ifcfg-em4 ifcfg-eth3
第四步:修改网卡配置文件内容,把em1全部修改改为eth0
修改之前:
DEVICE="em1"
NM_CONTROLLED="yes"
ONBOOT=yes
HWADDR=D4:AE:52:6A:8F:76
TYPE=Ethernet
BOOTPROTO=none
IPADDR=114.X.X.X
GATEWAY=114.X.X.X
NETMAKS=255.255.255.224
DNS1=202.106.0.20
DNS2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
修改之后:
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT=yes
HWADDR=D4:AE:52:6A:8F:76
TYPE=Ethernet
BOOTPROTO=none
IPADDR=114.X.X.X
GATEWAY=114.X.X.X
NETMAKS=255.255.255.224
DNS1=202.106.0.20
DNS2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
可以使用 perl -p -i -e 's/em1/eth0/g' ifcfg-eth0 或sed -i 's/em1/eth0/g' ifcfg-eth0 进行替换。
最后一步:重新启动系统 init 6 启动之后你就发现熟悉的eth0-eth4已经回来啦,顺便说下centos 6.2 还有一个问题就是如果你没有在网卡配置文件里写dns的话,重启之后你就会发现 /etc/resolv.conf 文件被清空了,一个方法就是在网卡配置文件中写DNS,另一个方法就是给/etc/resolv.conf加i属性,chattr +i /etc/resolv.conf
Jul
5
RHEL/CentOS 6.x的系统服务比5.x系列的要多了很多新面孔,估计很多童鞋不甚理解,网上这方面资料也很少。理解这个对运维人员是必要的,因为开启不必要的服务越多,系统就相对越不安全。不需开启的服务尽量关闭。本人结合自己的应用经验做一些讲解说明,有不同理解的童鞋欢迎交流。
下面列表是在RHEL/CentOS 6.x最小化桌面环境安装下显示出来的系统服务,其中红色字体标注的是用官方的minimal ISO最小化安装系统后的服务列表。
服务名称 | 功能 | 默认 | 建议 | 备注说明 |
NetworkManager | 用于自动连接网络,常用在Laptop上 | 开启 | 关闭 | 对服务器无用 |
abrt-ccpp | 开启 | 自定 | 对服务器无用 | |
abrt-oops | 开启 | 自定 | 对服务器无用 | |
abrtd | 开启 | 自定 | 对服务器无用 | |
acpid | 电源的开关等检测管理,常用在Laptop上 | 开启 | 自定 | 对服务器无用 |
atd | 在指定时间执行命令 | 开启 | 关闭 | 如果用crond,则可关闭它 |
auditd | 审核守护进程 | 开启 | 开启 | 如果用selinux,需要开启它 |
autofs | 文件系统自动加载和卸载 | 开启 | 自定 | 只在需要时开启它,可以关闭 |
avahi-daemon | 本地网络服务查找 | 开启 | 关闭 | 对服务器无用 |
bluetooth | 蓝牙无线通讯 | 开启 | 关闭 | 对服务器无用 |
certmonger | 关闭 | 关闭 | ||
cpuspeed | 调节cpu速度用来省电,常用在Laptop上 | 开启 | 关闭 | 对服务器无用 |
crond | 计划任务管理 | 开启 | 开启 | 常用,开启 |
cups | 通用unix打印服务 | 开启 | 关闭 | 对服务器无用 |
dnsmasq | dns cache | 关闭 | 关闭 | DNS缓存服务,无用 |
firstboot | 系统安装后初始设定 | 关闭 | 关闭 | |
haldaemon | 硬件信息收集服务 | 开启 | 开启 | |
ip6tables | ipv6防火墙 | 开启 | 关闭 | 用到ipv6网络的就用,一般关闭 |
iptables | ipv4防火墙 | 开启 | 开启 | ipv4防火墙服务 |
irqbalance | cpu负载均衡 | 开启 | 自定 | 多核cup需要 |
kdump | 硬件变动检测 | 关闭 | 关闭 | 服务器无用 |
lvm2-monitor | lvm监视 | 开启 | 自定 | 如果使用LVM逻辑卷管理就开启 |
matahari-broker | 关闭 | 关闭 | 此服务不清楚,我关闭 | |
matahari-host | 关闭 | 关闭 | 此服务不清楚,我关闭 | |
matahari-network | 关闭 | 关闭 | 此服务不清楚,我关闭 | |
matahari-service | 关闭 | 关闭 | 此服务不清楚,我关闭 | |
matahari-sysconfig | 关闭 | 关闭 | 此服务不清楚,我关闭 | |
mdmonitor | 软raid监视 | 开启 | 自定 | |
messagebus | 负责在各个系统进程之间传递消息 | 开启 | 开启 | 如停用,haldaemon启动会失败 |
netconsole | 关闭 | 关闭 | ||
netfs | 系统启动时自动挂载网络文件系统 | 开启 | 关闭 | 如果使用nfs服务,就开启 |
network | 系统启动时激活所有网络接口 | 开启 | 开启 | 网络基础服务,必需! |
nfs | 网络文件系统 | 关闭 | 关闭 | nfs文件服务,用到就开启 |
nfslock | nfs相关 | 开启 | 关闭 | nfs相关服务,用到就开启 |
ntpd | 自动对时工具 | 关闭 | 自定 | 网络对时服务,用到就开启 |
ntpdate | 自动对时工具 | 关闭 | 关闭 | |
oddjobd | 与D-BUS相关 | 关闭 | 关闭 | |
portreserve | RPC 服务相关 | 开启 | 自定 | 可以关闭 |
postfix | 替代sendmail的邮件服务器 | 开启 | 自定 | 如果无邮件服务,可关闭 |
psacct | 负荷检测 | 关闭 | 关闭 | 可以关闭 |
qpidd | 消息通信 | 开启 | 开启 | |
quota_nld | 关闭 | 关闭 | 可以关闭 | |
rdisc | 自动检测路由器 | 关闭 | 关闭 | |
restorecond | selinux相关 | 关闭 | 关闭 | 如果开启了selinux,就需开启 |
rpcbind | 开启 | 开启 | 关键的基础服务,nfs服务和桌面环境都依赖此服务!相当于CentOS 5.x里面的portmap服务。 | |
rpcgssd | NFS相关 | 开启 | 关闭 | NFS相关服务,可选 |
rpcidmapd | RPC name to UID/GID mapper | 开启 | 关闭 | NFS相关服务,可选 |
rpcsvcgssd | NFS相关 | 关闭 | 关闭 | NFS相关服务,可选 |
rsyslog | 提供系统的登录档案记录 | 开启 | 开启 | 系统日志关键服务,必需! |
saslauthd | sasl认证服务相关 | 关闭 | 关闭 | |
smartd | 硬盘自动检测守护进程 | 关闭 | 关闭 | |
spice-vdagentd | 开启 | 开启 | ||
sshd | ssh服务端,可提供安全的shell登录 | 开启 | 开启 | SSH远程登录服务,必需! |
sssd | 关闭 | 关闭 | ||
sysstat | 开启 | 开启 | 一组系统监控工具的服务,常用 | |
udev-post | 设备管理系统 | 开启 | 开启 | |
wdaemon | 关闭 | 关闭 | ||
wpa_supplicant | 无线认证相关 | 关闭 | 关闭 | |
ypbind | network information service客户端 | 关闭 | 关闭 |
系统服务管理工具:
chkconfig(所有linux发行版都有),用法很简单,如下:
chkconfig --list [name] chkconfig --add chkconfig --del chkconfig [--level ]
ntsysv(Redhat系发行版特有),直接运行选择服务是否自启动。
3、查看系统服务的相关说明:
在RHEL/CentOS下这些系统服务都是Shell脚本,我们可以使用rpm的命令参数来查看相应服务的说明。如想查看mysqld服务的说明:
rpm -qi $(rpm -qf /etc/init.d/mysqld)
如图所示:
Jul
5
limits.conf 文件实际是 Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so 的配置文件,而且只针对于单个会话。
limits.conf的格式如下:
username|@groupname type resource limit
username|@groupname:设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有用户的限制。
type:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比hard 限制高。用 - 就表明同时设置了 soft 和 hard 的值。
resource:
core - 限制内核文件的大小
date - 最大数据大小
fsize - 最大文件大小
memlock - 最大锁定内存地址空间
nofile - 打开文件的最大数目
rss - 最大持久设置大小
stack - 最大栈大小
cpu - 以分钟为单位的最多 CPU 时间
noproc - 进程的最大数目
as - 地址空间限制
maxlogins - 此用户允许登录的最大数目
要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中有:
session required /lib/security/pam_limits.so
按下面说的,可以用ulimit -n 32768设置最大描述符,不过只对当前会话有用,而且要root,这个不好办,或者修改/etc/security/limits.conf,但要重启
另外,没查到linux究竟最大描述符有没有限制,其他几个限制要不要改
http://www.nsfocus.net/index.php?act=magazine&do=view&mid=134
如何限制和监视用户
PAM 大多数的LINUX都内建了PAM支持。PAM的一个功能是系统环境设置,例如设置某个用户允许使用的系统内存大小等。在Red Hat和Caldera这两个发行版本的 /etc/security/ 目录下包含了许多可配置文件。最有趣的当属 /etc/security/limits.conf 文件,它允许你定义用户或用户组规则,规则是“软(soft)”或“硬(hard)”,规则的内容(如CPU、内存、最大文件大小等)。例如:
* hard core 0
bob soft nproc 100
bob hard nproc 150
第一行规则禁止所有人产生core文件,第二行规则(软)定义用户bob的最大进程数为100,第三行规则(硬)定义用户bob的最大进程数为150。可以超出软规则的限制(警告),但不能超过硬规则的限制。你可以想像得到,这些规则定义到所有用户的登录SHELL和FTP等服务时是很有帮助的。
Bash
Bash内建了一个限制器"ulimit"。注意任何硬限制都不能设置得太高,因此如果你在/etc/profile或用户的 .bash_profile (用户不能编辑或删除这些文件)中定义了限制规则,你就能对用户的Bash shell实施限制。这对于缺少PAM支持的LINUX旧发行版本是很有用的。你还必须确保用户不能改变他们的登录shell。限制的设置与PAM相似。例如:
ulimit –Sc 0
ulimit –Su 100
ulimit –Hu 150
http://www.ringkee.com/jims/read_folder/books/LinuxHackingExposed
Ulimit命令
设置限制
可以把命令加到profile文件里,也可以在/etc/security/limits.conf文件中定义限制。
命令参数:
-a 显示所有限制
-c core文件大小的上限
-d 进程数据段大小的上限
-f shell所能创建的文件大小的上限
-m 驻留内存大小的上限
-s 堆栈大小的上限
-t 每秒可占用的CPU时间上限
-p 管道大小
-n 打开文件数的上限
-u 进程数的上限
-v 虚拟内存的上限
除可用Ulimit命令设置外,也可以在/etc/security/limits.conf文件中定义限制。
domino type item value
domino是以符号@开头的用户名或组名,*表示所有用户,type设置为hard or soft。item指定想限制的资源。如cpu,core nproc or maxlogins。value是相应的限制值。
http://tech.blogchina.com/123/2005-06-10/372941.html
Unix、Linux下常用监控和管理命令工具
检查编写的程序打开的文件数。
sysctl:显示(或设置)系统内核参数
sysctl -a 显示所有内核参数
sysctl -w 参数名=参数值
例如:sysctl -w fs.file-max=10240 设置系统允许同时打开的最大文件数为10240。
内核参数fs.file-nr包括三个参数值,第一个参数表示系统中曾经同时打开过的文件数峰值,
第二个参数表示空闲(分配后已释放)的文件数,
第三个参数表示可以打开的最大文件数,其值等于fs.file-max。
当前打开的文件数 = 第一个参数值 - 第二个参数值
例如:
fs.file-nr = 977 223 10240
当前打开的文件数 = 977 - 233 = 744
设置内核参数时务必小心,如果设置不当会导致系统异常,甚至当机。
ulimit:显示(或设置)用户可以使用的资源限制
ulimit -a 显示用户可以使用的资源限制
ulimit unlimited 不限制用户可以使用的资源,但本设置对可打开的最大文件数(max open files)
和可同时运行的最大进程数(max user processes)无效
ulimit -n <可以同时打开的文件数> 设置用户可以同时打开的最大文件数(max open files)
例如:ulimit -n 8192
如果本参数设置过小,对于并发访问量大的网站,可能会出现too many open files的错误
ulimit -u <可以运行的最大并发进程数> 设置用户可以同时运行的最大进程数(max user processes)
例如:ulimit -u 1024
http://www-128.ibm.com/developerworks/cn/linux/es-JavaVirtualMachinePerformance.html?ca=dwcn-newsletter-linux
IBM JVM for Linux on POWER 的性能调优技巧
用户限制设置
为了获得最佳性能,让运行 JVM 进程的用户拥有经过正确配置的用户设置是很重要的。这些参数可以设置成以下两种形式之一:
暂时地,适用于通过 ulimit 命令登录 shell 会话期间。
永久地,通过将一个相应的 ulimit 语句添加到由登录 shell 读取的文件之一(例如 ~/.profile),即特定于 shell 的用户资源文件;或者通过编辑 /etc/security/limits.conf。
建议设置成无限制(unlimited)的一些重要设置是:
数据段长度:ulimit –d unlimited
最大内存大小:ulimit –m unlimited
堆栈大小:ulimit –s unlimited
CPU 时间:ulimit –t unlimited
虚拟内存:ulimit –v unlimited
对于需要做许多套接字连接并使它们处于打开状态的 Java 应用程序而言,最好通过使用 ulimit –n,或者通过设置
/etc/security/limits.conf 中的 nofile 参数,为用户把文件描述符的数量设置得比默认值高一些。
提高 Oracle 用户的 shell 限制
/etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
/etc/pam.d/login
session required /lib/security/pam_limits.so
/etc/profile
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
limits.conf的格式如下:
username|@groupname type resource limit
username|@groupname:设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有用户的限制。
type:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比hard 限制高。用 - 就表明同时设置了 soft 和 hard 的值。
resource:
core - 限制内核文件的大小
date - 最大数据大小
fsize - 最大文件大小
memlock - 最大锁定内存地址空间
nofile - 打开文件的最大数目
rss - 最大持久设置大小
stack - 最大栈大小
cpu - 以分钟为单位的最多 CPU 时间
noproc - 进程的最大数目
as - 地址空间限制
maxlogins - 此用户允许登录的最大数目
要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中有:
session required /lib/security/pam_limits.so
按下面说的,可以用ulimit -n 32768设置最大描述符,不过只对当前会话有用,而且要root,这个不好办,或者修改/etc/security/limits.conf,但要重启
另外,没查到linux究竟最大描述符有没有限制,其他几个限制要不要改
http://www.nsfocus.net/index.php?act=magazine&do=view&mid=134
如何限制和监视用户
PAM 大多数的LINUX都内建了PAM支持。PAM的一个功能是系统环境设置,例如设置某个用户允许使用的系统内存大小等。在Red Hat和Caldera这两个发行版本的 /etc/security/ 目录下包含了许多可配置文件。最有趣的当属 /etc/security/limits.conf 文件,它允许你定义用户或用户组规则,规则是“软(soft)”或“硬(hard)”,规则的内容(如CPU、内存、最大文件大小等)。例如:
* hard core 0
bob soft nproc 100
bob hard nproc 150
第一行规则禁止所有人产生core文件,第二行规则(软)定义用户bob的最大进程数为100,第三行规则(硬)定义用户bob的最大进程数为150。可以超出软规则的限制(警告),但不能超过硬规则的限制。你可以想像得到,这些规则定义到所有用户的登录SHELL和FTP等服务时是很有帮助的。
Bash
Bash内建了一个限制器"ulimit"。注意任何硬限制都不能设置得太高,因此如果你在/etc/profile或用户的 .bash_profile (用户不能编辑或删除这些文件)中定义了限制规则,你就能对用户的Bash shell实施限制。这对于缺少PAM支持的LINUX旧发行版本是很有用的。你还必须确保用户不能改变他们的登录shell。限制的设置与PAM相似。例如:
ulimit –Sc 0
ulimit –Su 100
ulimit –Hu 150
http://www.ringkee.com/jims/read_folder/books/LinuxHackingExposed
Ulimit命令
设置限制
可以把命令加到profile文件里,也可以在/etc/security/limits.conf文件中定义限制。
命令参数:
-a 显示所有限制
-c core文件大小的上限
-d 进程数据段大小的上限
-f shell所能创建的文件大小的上限
-m 驻留内存大小的上限
-s 堆栈大小的上限
-t 每秒可占用的CPU时间上限
-p 管道大小
-n 打开文件数的上限
-u 进程数的上限
-v 虚拟内存的上限
除可用Ulimit命令设置外,也可以在/etc/security/limits.conf文件中定义限制。
domino type item value
domino是以符号@开头的用户名或组名,*表示所有用户,type设置为hard or soft。item指定想限制的资源。如cpu,core nproc or maxlogins。value是相应的限制值。
http://tech.blogchina.com/123/2005-06-10/372941.html
Unix、Linux下常用监控和管理命令工具
检查编写的程序打开的文件数。
sysctl:显示(或设置)系统内核参数
sysctl -a 显示所有内核参数
sysctl -w 参数名=参数值
例如:sysctl -w fs.file-max=10240 设置系统允许同时打开的最大文件数为10240。
内核参数fs.file-nr包括三个参数值,第一个参数表示系统中曾经同时打开过的文件数峰值,
第二个参数表示空闲(分配后已释放)的文件数,
第三个参数表示可以打开的最大文件数,其值等于fs.file-max。
当前打开的文件数 = 第一个参数值 - 第二个参数值
例如:
fs.file-nr = 977 223 10240
当前打开的文件数 = 977 - 233 = 744
设置内核参数时务必小心,如果设置不当会导致系统异常,甚至当机。
ulimit:显示(或设置)用户可以使用的资源限制
ulimit -a 显示用户可以使用的资源限制
ulimit unlimited 不限制用户可以使用的资源,但本设置对可打开的最大文件数(max open files)
和可同时运行的最大进程数(max user processes)无效
ulimit -n <可以同时打开的文件数> 设置用户可以同时打开的最大文件数(max open files)
例如:ulimit -n 8192
如果本参数设置过小,对于并发访问量大的网站,可能会出现too many open files的错误
ulimit -u <可以运行的最大并发进程数> 设置用户可以同时运行的最大进程数(max user processes)
例如:ulimit -u 1024
http://www-128.ibm.com/developerworks/cn/linux/es-JavaVirtualMachinePerformance.html?ca=dwcn-newsletter-linux
IBM JVM for Linux on POWER 的性能调优技巧
用户限制设置
为了获得最佳性能,让运行 JVM 进程的用户拥有经过正确配置的用户设置是很重要的。这些参数可以设置成以下两种形式之一:
暂时地,适用于通过 ulimit 命令登录 shell 会话期间。
永久地,通过将一个相应的 ulimit 语句添加到由登录 shell 读取的文件之一(例如 ~/.profile),即特定于 shell 的用户资源文件;或者通过编辑 /etc/security/limits.conf。
建议设置成无限制(unlimited)的一些重要设置是:
数据段长度:ulimit –d unlimited
最大内存大小:ulimit –m unlimited
堆栈大小:ulimit –s unlimited
CPU 时间:ulimit –t unlimited
虚拟内存:ulimit –v unlimited
对于需要做许多套接字连接并使它们处于打开状态的 Java 应用程序而言,最好通过使用 ulimit –n,或者通过设置
/etc/security/limits.conf 中的 nofile 参数,为用户把文件描述符的数量设置得比默认值高一些。
提高 Oracle 用户的 shell 限制
/etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
/etc/pam.d/login
session required /lib/security/pam_limits.so
/etc/profile
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
Jul
5
因为最近遇到一些超时的问题,正好就把所有的timeout参数都理一遍,首先数据库里查一下看有哪些超时:
root@localhost : test 12:55:50> SHOW global VARIABLES LIKE “%timeout%”;
+—————————-+——–+
| Variable_name | VALUE |
+—————————-+——–+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 120 |
| innodb_rollback_on_timeout | ON |
| interactive_timeout | 172800 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| table_lock_wait_timeout | 50 | # 这个参数已经没用了
| wait_timeout | 172800 |
+—————————-+——–+
我们一个个来看
connect_timeout
手册描述:
The number of seconds that the mysqld server waits for a connect packet before responding with Bad handshake. The default value is 10 seconds as of MySQL 5.1.23 and 5 seconds before that.
Increasing the connect_timeout value might help if clients frequently encounter errors of the form Lost connection to MySQL server at ‘XXX’, system error: errno.
解释:在获取链接时,等待握手的超时时间,只在登录时有效,登录成功这个参数就不管事了。主要是为了防止网络不佳时应用重连导致连接数涨太快,一般默认即可。
delayed_insert_timeout
手册描述:
How many seconds an INSERT DELAYED handler thread should wait for INSERT statements before terminating.
解释:这是为MyISAM INSERT DELAY设计的超时参数,在INSERT DELAY中止前等待INSERT语句的时间。
innodb_lock_wait_timeout
手册描述:
The timeout in seconds an InnoDB transaction may wait for a row lock before giving up. The default value is 50 seconds. A transaction that tries to access a row that is locked by another InnoDB transaction will hang for at most this many seconds before issuing the following error:
ERROR 1205 (HY000): LOCK wait timeout exceeded; try restarting TRANSACTION
When a lock wait timeout occurs, the current statement is not executed. The current transaction is not rolled back. (To have the entire transaction roll back, start the server with the –innodb_rollback_on_timeout option, available as of MySQL 5.1.15. See also Section 13.6.12, “InnoDB Error Handling”.)
innodb_lock_wait_timeout applies to InnoDB row locks only. A MySQL table lock does not happen inside InnoDB and this timeout does not apply to waits for table locks.
InnoDB does detect transaction deadlocks in its own lock table immediately and rolls back one transaction. The lock wait timeout value does not apply to such a wait.
For the built-in InnoDB, this variable can be set only at server startup. For InnoDB Plugin, it can be set at startup or changed at runtime, and has both global and session values.
解释:描述很长,简而言之,就是事务遇到锁等待时的Query超时时间。跟死锁不一样,InnoDB一旦检测到死锁立刻就会回滚代价小的那个事务,锁等待是没有死锁的情况下一个事务持有另一个事务需要的锁资源,被回滚的肯定是请求锁的那个Query。
innodb_rollback_on_timeout
手册描述:
In MySQL 5.1, InnoDB rolls back only the last statement on a transaction timeout by default. If –innodb_rollback_on_timeout is specified, a transaction timeout causes InnoDB to abort and roll back the entire transaction (the same behavior as in MySQL 4.1). This variable was added in MySQL 5.1.15.
解释:这个参数关闭或不存在的话遇到超时只回滚事务最后一个Query,打开的话事务遇到超时就回滚整个事务。
interactive_timeout/wait_timeout
手册描述:
The number of seconds the server waits for activity on an interactive connection before closing it. An interactive client is defined as a client that uses the CLIENT_INTERACTIVE option to mysql_real_connect(). See also
解释:一个持续SLEEP状态的线程多久被关闭。线程每次被使用都会被唤醒为acrivity状态,执行完Query后成为interactive状态,重新开始计时。wait_timeout不同在于只作用于TCP/IP和Socket链接的线程,意义是一样的。
net_read_timeout / net_write_timeout
手册描述:
The number of seconds to wait for more data from a connection before aborting the read. Before MySQL 5.1.41, this timeout applies only to TCP/IP connections, not to connections made through Unix socket files, named pipes, or shared memory. When the server is reading from the client, net_read_timeout is the timeout value controlling when to abort. When the server is writing to the client, net_write_timeout is the timeout value controlling when to abort. See also slave_net_timeout.
On Linux, the NO_ALARM build flag affects timeout behavior as indicated in the description of the net_retry_count system variable.
解释:这个参数只对TCP/IP链接有效,分别是数据库等待接收客户端发送网络包和发送网络包给客户端的超时时间,这是在Activity状态下的线程才有效的参数
slave_net_timeout
手册描述:
The number of seconds to wait for more data from the master before the slave considers the connection broken, aborts the read, and tries to reconnect. The first retry occurs immediately after the timeout. The interval between retries is controlled by the MASTER_CONNECT_RETRY option for the CHANGE MASTER TO statement or –master-connect-retry option, and the number of reconnection attempts is limited by the –master-retry-count option. The default is 3600 seconds (one hour).
解释:这是Slave判断主机是否挂掉的超时设置,在设定时间内依然没有获取到Master的回应就人为Master挂掉了
root@localhost : test 12:55:50> SHOW global VARIABLES LIKE “%timeout%”;
+—————————-+——–+
| Variable_name | VALUE |
+—————————-+——–+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 120 |
| innodb_rollback_on_timeout | ON |
| interactive_timeout | 172800 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| table_lock_wait_timeout | 50 | # 这个参数已经没用了
| wait_timeout | 172800 |
+—————————-+——–+
我们一个个来看
connect_timeout
手册描述:
The number of seconds that the mysqld server waits for a connect packet before responding with Bad handshake. The default value is 10 seconds as of MySQL 5.1.23 and 5 seconds before that.
Increasing the connect_timeout value might help if clients frequently encounter errors of the form Lost connection to MySQL server at ‘XXX’, system error: errno.
解释:在获取链接时,等待握手的超时时间,只在登录时有效,登录成功这个参数就不管事了。主要是为了防止网络不佳时应用重连导致连接数涨太快,一般默认即可。
delayed_insert_timeout
手册描述:
How many seconds an INSERT DELAYED handler thread should wait for INSERT statements before terminating.
解释:这是为MyISAM INSERT DELAY设计的超时参数,在INSERT DELAY中止前等待INSERT语句的时间。
innodb_lock_wait_timeout
手册描述:
The timeout in seconds an InnoDB transaction may wait for a row lock before giving up. The default value is 50 seconds. A transaction that tries to access a row that is locked by another InnoDB transaction will hang for at most this many seconds before issuing the following error:
ERROR 1205 (HY000): LOCK wait timeout exceeded; try restarting TRANSACTION
When a lock wait timeout occurs, the current statement is not executed. The current transaction is not rolled back. (To have the entire transaction roll back, start the server with the –innodb_rollback_on_timeout option, available as of MySQL 5.1.15. See also Section 13.6.12, “InnoDB Error Handling”.)
innodb_lock_wait_timeout applies to InnoDB row locks only. A MySQL table lock does not happen inside InnoDB and this timeout does not apply to waits for table locks.
InnoDB does detect transaction deadlocks in its own lock table immediately and rolls back one transaction. The lock wait timeout value does not apply to such a wait.
For the built-in InnoDB, this variable can be set only at server startup. For InnoDB Plugin, it can be set at startup or changed at runtime, and has both global and session values.
解释:描述很长,简而言之,就是事务遇到锁等待时的Query超时时间。跟死锁不一样,InnoDB一旦检测到死锁立刻就会回滚代价小的那个事务,锁等待是没有死锁的情况下一个事务持有另一个事务需要的锁资源,被回滚的肯定是请求锁的那个Query。
innodb_rollback_on_timeout
手册描述:
In MySQL 5.1, InnoDB rolls back only the last statement on a transaction timeout by default. If –innodb_rollback_on_timeout is specified, a transaction timeout causes InnoDB to abort and roll back the entire transaction (the same behavior as in MySQL 4.1). This variable was added in MySQL 5.1.15.
解释:这个参数关闭或不存在的话遇到超时只回滚事务最后一个Query,打开的话事务遇到超时就回滚整个事务。
interactive_timeout/wait_timeout
手册描述:
The number of seconds the server waits for activity on an interactive connection before closing it. An interactive client is defined as a client that uses the CLIENT_INTERACTIVE option to mysql_real_connect(). See also
解释:一个持续SLEEP状态的线程多久被关闭。线程每次被使用都会被唤醒为acrivity状态,执行完Query后成为interactive状态,重新开始计时。wait_timeout不同在于只作用于TCP/IP和Socket链接的线程,意义是一样的。
net_read_timeout / net_write_timeout
手册描述:
The number of seconds to wait for more data from a connection before aborting the read. Before MySQL 5.1.41, this timeout applies only to TCP/IP connections, not to connections made through Unix socket files, named pipes, or shared memory. When the server is reading from the client, net_read_timeout is the timeout value controlling when to abort. When the server is writing to the client, net_write_timeout is the timeout value controlling when to abort. See also slave_net_timeout.
On Linux, the NO_ALARM build flag affects timeout behavior as indicated in the description of the net_retry_count system variable.
解释:这个参数只对TCP/IP链接有效,分别是数据库等待接收客户端发送网络包和发送网络包给客户端的超时时间,这是在Activity状态下的线程才有效的参数
slave_net_timeout
手册描述:
The number of seconds to wait for more data from the master before the slave considers the connection broken, aborts the read, and tries to reconnect. The first retry occurs immediately after the timeout. The interval between retries is controlled by the MASTER_CONNECT_RETRY option for the CHANGE MASTER TO statement or –master-connect-retry option, and the number of reconnection attempts is limited by the –master-retry-count option. The default is 3600 seconds (one hour).
解释:这是Slave判断主机是否挂掉的超时设置,在设定时间内依然没有获取到Master的回应就人为Master挂掉了