发布新日志

  • linux ulimit 正确配置(转)

    2013-12-20 09:52:41

    linux ulimit 正确配置(转)

    正确配置Linux系统ulimit值的方法

    在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题;这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用其实很容易就达到这个数量。下面说的是,如何通过正解配置来改正这个系统默认值。因为这个问题是我配置Nginx+php5时遇到了,所以我将这篇归纳进nginx+apache篇。

    查看方法

    我们可以用ulimit -a来查看所有限制值
    [root@centos5 ~]# ulimit -a
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    max nice                        (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 4096
    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
    max rt priority                 (-r) 0
    stack size              (kbytes, -s) 10240
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 4096
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited||<

    其中 "open files (-n) 1024 "是Linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的SOCKET数量,可影响MySQL的并发连接数目)。这个值可用ulimit命令来修改,但ulimit命令修改的数值只对当前登录用户的目前使用环境有效,系统重启或者用户退出后就会失效(在布署Nginx+FastCGI我就遇到这个问题,将ulimit -SHn 65535放到/etc/rc.d/rc.local也没起什么作用)

    系统总限制是在这里,/proc/sys/fs/file-max。可以通过cat查看目前的值,修改/etc/sysctl.conf 中也可以控制。

    另外还有一个,/proc/sys/fs/file-nr,可以看到整个系统目前使用的文件句柄数量。

    查找文件句柄问题的时候,还有一个很实用的程序lsof。可以很方便看到某个进程开了那些句柄,也可以看到某个文件/目录被什么进程占用了。

    修改方法
    若要令修改ulimits的数值永久生效,则必须修改配置文档,可以给ulimit修改命令放入/etc/profile里面,这个方法实在是不方便,还有一个方法是修改/etc/sysctl.conf。我修改了,测试过,但对用户的ulimits -a 是不会改变的,只是/proc/sys/fs/file-max的值变了。

    我认为正确的做法,应该是修改/etc/security/limits.conf
    里面有很详细的注释,比如
    * soft   nofile   32768
    * hard nofile 65536
    就可以将文件句柄限制统一改成软32768,硬65536。配置文件最前面的是指domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制。

    注意:这个当中的硬限制是实际的限制,而软限制,是warnning限制,只会做出warning;其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软
    默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变。

    生效
    因为我平时工作最多的是部署web环境(Nginx+FastCGI外网生产环境和内网开发环境),重新登陆即可(reboot其实也行)我分别用root和www用户登陆,用ulimit -a分别查看确认,做这之前最好是重启下ssh服务,service sshd restart。
    博客地址:【爱开卷360】http://www.cnblogs.com/ibook360

  • linux系统批量修改文件内容的命令

    2013-12-13 17:17:41

    批量修改文件内容的linux命令:
    :1,$s/替换前的内容/替换后的内容/g
    1表示从第一行开始
    /g表示一行有多项替换前内容的情况

  • Linux 定时器常用命令

    2012-07-04 11:56:07

    常用命令:
    *定时器
      touch test.sh
      crontab -e
      crontab -l
      service crond stop
      service crond start
      30 15 * * * /home/test.sh

    *修改服务器时间:
      
       修改时间:date -s 11:00:00
       修改日期:date -s 081127   (修改为2008-11-27)
  • Linux 性能命令

    2012-07-04 11:46:37

    查看内存命令:free
    ----------------------------------------------------------------------------
           total       used       free     shared    buffers     cached
    Mem:       2070108    1933192     136916          0      38512     916196
    -/+ buffers/cache:     978484    1091624
    Swap:      2031608        208    2031400
    ------------------------------------------------------------------------
    total:总计物理内存的大小。
    used:已使用多大。
    free:可用有多少。
    Shared:多个进程共享的内存总额。
    Buffers/cached:磁盘缓存的大小。
    第三行(-/+ buffers/cached):
    used:已使用多大。
    free:可用有多少。
    说明:第二行是从OS角度看的
    第三行是从应用程序角度看的,从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
    所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.
    buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.
    cached是用来给文件做缓冲。
    那就是说:buffers是用来存储,目录里面有什么内容,权限等等。
    而cached直接用来记忆我们打开的文件
    free 使用:free -s 1 (间隔1秒打印一次内存数据) free -m 以MB为单位显示内存使用情况  free -t 显示总内存量
    ****************************************************************************************
    top
    查看当前服务器内核服务的任务,还显示了当前主机状态的统计数据,
  • scp 命令

    2012-07-04 11:38:46

    1.copy远程机器上的档案到本地来
    scp my@www.upsdn.net:/etc/lilo.conf /etc
    会将 http://www.upsdn.net 中 /etc/lilo.conf 档案 copy 到本地的 /etc 目录下。
     
    2.copy 本地的档案到远程的机器上
    scp /etc/lilo.conf my@www.upsdn.net:/home/my
    会将本地的 /etc/lilo.conf 这个档案 copy 到 www.upsdn.net,使用者my 的家目录下。
  • ssh scp 命令不用输密码的设置

    2012-07-04 11:34:35

    ssh, scp 不输入密码
    2009-10-19 17:47

    经常在不同linux机器之间互相scp拷文件,每次总是要输入密码才可行。

    通过ssh-keygen生成公钥,在两台机器之间互相建立信任通道即可。

    假设本地机器client,远程机器为server。

    1. 生成rsa keygen

    [winter@client winter] $ ssh-keygen -b 1024 -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/winter/.ssh/id_rsa): <Enter>
    Enter passphrase (empty for no passphrase): <Enter>
    Enter same passphrase again: <Enter>
    Your identification has been saved in /home/winter/.ssh/id_rsa.
    Your public key has been saved in /home/winter/.ssh/id_rsa.pub.
    The key fingerprint is:
    33:d4:7b:9c:87:04:cf:14:40:22:6d:c7:15:78:97:6a winter@client

    直接上面公钥和私钥存放地址可以直接回车,私钥密码可以直接回车,也可以输入。

    2. 查看.ssh目录下了多私钥和公钥文件

    [winter@client winter] $ ls .ssh/
    id_rsa  id_rsa.pub  known_hosts

    3. 拷贝公钥到目标机器上,并改名成authorized_keys

    [winter@client winter] $ scp .ssh/id_rsa.pub winter@192.168.0.110:/home/winter/.ssh/authorized_keys
    The authenticity of host '192.168.0.110(192.168.0.110)' can't be established.
    RSA key fingerprint is 5b:78:e8:e9:dc:d8:db:bd:f7:66:44:e6:3b:ce:f2:79.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.0.110' (RSA) to the list of known hosts.
    winter@192.168.0.110's password: <Enter>
    id_rsa.pub                                                                     100%  221     1.2MB/s   00:00

    首次scp命令时候还是会提示输入密码,还有是否继续链接的提示,以后

    4. 测试ssh进入

    [winter@client winter] $ ssh 192.168.0.110

    5. ok,搞定!

  • rpm命令

    2008-07-11 16:27:01

    1.安装一个包
    # rpm -ivh
    2.升级一个包
    # rpm -Uvh
    3.移走一个包
    # rpm -e
    4.安装参数
    --force 即使覆盖属于其它包的文件也强迫安装
    --nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。
    5.查询一个包是否被安装
    # rpm -q < rpm package name>
    6.得到被安装的包的信息
    # rpm -qi < rpm package name>
    7.列出该包中有哪些文件
    # rpm -ql < rpm package name>
    8.列出服务器上的一个文件属于哪一个RPM包
    #rpm -qf
    9.可综合好几个参数一起用
    # rpm -qil < rpm package name>
    10.列出所有被安装的rpm package
    # rpm -qa
    11.列出一个未被安装进系统的RPM包文件中包含有哪些文件?
    # rpm -qilp < rpm package name>

Open Toolbar