• linux服务器优化


    ++不使用atime属性,例 需为/data设置notime,可修改/etc/fstab如下:
    /dev/sdb1 /data ext3 noatime 0 0
    #mount -o noatime,remount /dev/sdb1

    ++ext3 不执行任何形式的数据日志记录以提供最佳的 ext3 性能
    添 加data=writeback 于fstab,或在mount时加 -o data=writeback

    ++调整默认的同时可打开最大文件数以及i-节点数
    # echo ‘8192′ > /proc/sys/fs/file-max
    # echo ‘32768′ > /proc/sys/fs/inode-max
    # 加入rc.local
    #一般最大打开文件数可设置为每4M物理内存256,即256M内存可设为16384,而最大的使用的i节点应是最大打开文 件数目的3-4倍
    #cat /proc/sys/fs/file-nr
    共有三个值, 第一个是系统开机以来
    总共打开的文件 描述符的数量,第2个是总共的空闲的文件描述符的数量,第3个是最大能打开的文件描述符的数量

    ++修改内核共享内存限制为256M,默认是32M
    echo 268435456 >/proc/sys/kernel/shmall
    echo 268435456 >/proc/sys/kernel/shmmax

    ++禁止广播和ping入
    echo “1″ > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    echo “1″ > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

    ++sysctl一些优化
    sysctl -w net.ipv4.ip_conntrack_max=655360
    ##解决 messages suppressed报错问题
    sysctl -w net.ipv4.neigh.default.gc_thresh3=4096
    sysctl -w net.ipv4.neigh.default.gc_thresh2=2048
    sysctl -w net.ipv4.neigh.default.gc_thresh1=1024
    sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=60
    sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=30
    sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=60
    sysctl -w net.ipv4.tcp_tw_reuse=1
    sysctl -w net.ipv4.tcp_tw_recycle=1

    ++进程限制
    ulimit -n 4096 # 将每个进程可以打开的文件数目加大到4096,缺省为1024
    ulimit -m 4096 # 限制每个进程使用的内存数

    ++看IO数据
    iostat -t 5 5
    iostat -x
    sar -d 2 20

    ++32位操作系统文件大小就是2G,for X86-64版本的EL4支持超过2G的文件

    ++ 相关限制调高
    echo “xxxx” >/proc/sys/fs/file-max #整个系统所有可打开文件 总数的限制。xxxx值可按256/4M内存计算。
    ulimit -n 10000 #某一程序可打开文件 总数的限制

    ++ 块大小
    mkfs.exe3 -b 4096 -m 1 /dev/sdb1 #使用4k块,保留空间设为1%(default 5%)
    #大文件区可以使用较大块增加性能(但大块浪费空间)

    ++使用tmpfs
    tmpfs 文件系统会完全驻留在 RAM 中,速度快,但重启数据将丢失.默认分区大小是系统内存的一半,可以size=1024M修改。
    mkdir /dev/shm/ram
    mount –bind /dev/shm/ram /RAM

    ++关闭不需要的tty
    vi /etc/inittab
    1:2345:respawn:/sbin/mingetty tty1
    2:2345:respawn:/sbin/mingetty tty2
    3:2345:respawn:/sbin/mingetty tty3
    4:2345:respawn:/sbin/mingetty tty4
    5:2345:respawn:/sbin/mingetty tty5
    6:2345:respawn:/sbin/mingetty tty6
    把后面4个注释掉.
    init q #重新执行/etc/inittab,可以不重启生效。

    ++关闭ipv6?
    vi /etc/modprobe.conf,在文件中添加以下两行
    alias net-pf-10 off
    alias ipv6 off

    ++使用 cURL 度量 Web 站点的响应时间
    curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} http://blog.zhangjianfeng.com/
    0.052:0.955:1.964
    #time_connect 建立到服务器的 TCP 连接所用的时间
    #time_starttransfer 在发出请求之后,Web 服务器返回数据的第一个字节所用的时间
    #time_total 完成请求所用的时间
    #这些计时器要先于DNS查询。因此,在发出请求之 后,Web 服务器处理请求并开始发回数据所用的时间是 0.955-0.052=0.903 秒。客户机从服务器下载数据所用的时间是 1.964-0.955=1.009 秒。
    #Firefox 浏览器的 Tamper Data 可以在日志中记录 Web 浏览器发出的每个请求,并显示每个请求所用的下载时间

    ++使用curl取URL的Head信息
    curl -I url

    ++硬盘读取数据性能
    hdparm -tT /dev/sda

    ++网络文件系统(NFS)
    NFS客户端可使用rsize=32768,wsize=32768,intr,noatime 挂装远程文件系统
    * 使用大的读/写块(数字指定最大块大小,在这个示例中是 32KB)。
    * 在挂起时 NFS 操作可以被中断。
    * 不持续更新 atime。
    # nfsstat -rc 命令评估客户机连接情况
    Client rpc stats:
    calls retrans authrefrsh # retrans列是零,这表示系统启动后没有出现需要重新传输的情况。
    1465903813 0 0 #如果这个数字比较大,就应该考虑增加 NFS 内核线程,如运行rpc.nfsd 128

    ++网卡做Bonding
    http://blog.zhangjianfeng.com/?p=177

    ++WEB服务器优化
    | 客户端 | ===> |负载均衡器| ===> |反向代理/缓存| ===> |WEB服务器| ===> |数据库服务器|
    - Nginx/LVS Squid Apache,PHP MySQL/ORACLE
    * eAccelerator/memcache

    ++ Apache部分特性控制
    AllowOverride None #禁止寻找.htaccess,加快响应.
    Options FollowSymLinks #不检查相关文件是不是符号连接,加快响应.
    MaxKeepAliveRequests 50 #一次持续长连接最多允许接收几次请求,如太大会消耗更多内存
    KeepAliveTimeout 5 #长连接在无活动后等待多久自动关闭,太小会导致频繁创建新的进程,太大会占连接
    <IfModule worker.c>
    ServerLimit 20 #服务器允许配置的进程数上限
    ThreadLimit 200 #每个子进程可配置的线程数上限
    StartServers 5 #服务器启动时建立的子进程数
    MinSpareThreads 50 #最小空闲线程数
    MaxSpareThreads 250 # 设置最大空闲线程数
    MaxClients 2000 # 同一时间最大接入请求数量(ServerLimit乘ThreadsPerChild的值)
    ThreadsPerChild 100 #每个子进程建立的常驻的执行线程数,子进程在启动时建立这些线程后就不再建立新的线程了
    MaxRequestsPerChild 10000 ##每个进程只响应xxxx次,超过此数后关闭自身并启用新的进程
    </IfModule>
    Timeout 300 #客户程序和服务器连接的超时间隔
    KeepAlive On #用于支持HTTP 1.1版本的一次连接、多次传输功能
    MaxKeepAliveRequests 100 #一次连接可以进行的HTTP请求的最大请求次数。其值为0时为不限制
    #ExtendedStatus On #服务器提供运行状态信息。
    #ServerAdmin you@your.address
    KeepAliveTimeout 15 #一次连接中的多次请求传输之间的时间,超过定义值后,服务器就断开连接。
    –找相对低端的机器处理图片和 HTML 页面,使用squid或设置KeepAlives off ,来减少断开连接的时间。
    – 将图片与页面服务器进行分离,因图片传输需要的时间更长,传输需要花很大开销在建立连接上,apache并发性能肯定会下降
    –Web目录中文件数 不要太多(超过1000),文件越多花费在定位上的时间也越多.

    ++其它
    对于 PHP 脚本而言,主要的瓶颈是 CPU ,对于静态页面而言,瓶颈是内存和网络。
    3、Apache 处理 PHP 脚本的速度要比静态页面慢 2-10 倍,因此尽量采用多的静态页面,少的脚本。
    4、PHP 脚本如果不做缓冲,每次调用都需要编译,因此,安装一个 PHP 缓冲产品能提升 25-100% 的性能。

    [第三方软件优化]
    18、如果喜欢从修改 Apache 源码入手,可以安装 lingerd。在页面产生和发送后,每个 Apache 进程都会浪费一段时光在客户连接上,Lingerd 能接管这项工作,让 Apache 迅速服务下一个客户请求。
    19、如果你足够勇敢的话,还 可以采用 Silicon Graphics 的 Accelerated Apache 补丁。这个工程能使 Apache 1.3 快 10 倍,使 Apache 2.0 快 4 倍。
    安装一个 PHP 缓冲产品能提升 25-100% 的性能。

    ++Test Web server’s compression support
    http://www.port80software.com/products/httpzip/compresscheck

    ++APACHE优化原则
    1点击/秒以下,可以不优化apache与系统的接口
    1点击/秒以上,需要优化apache与系统的接口
    每 日PV数 / 86400秒 * 10个派生连接数 * 5秒内响应 * 5倍峰值) / Web服务器台数 = 同时连接数

    ++buffer 设置
    /proc/sys/net/core/rmem_default & /proc/sys/net/core/wmem_default

    ++性能瓶径值
    CPU >80%
    vmstat 中r(run)<5,b(behind)≈0,
    IBM RS/6000: 好 坏 糟糕
    CPU: user% + sys%< 70% user% + sys%= 85% user% + sys%=90%+
    磁盘: iowait % < 30% iowait % =40% iowait % = 50%+
    内存: 无pagein pageout 每个CPU 达到10 page/秒 更多的pagein pageout
    网络 < 30% 网络带宽
    运 行队列(Run Queue) < 2 * CPU个数

    一般来说vmstat的性能指标为:wa不超过25,us+sy多用户情况下不超过80%,r和b不高于5,pi和po基本为零,fr:sr 接近1:1(当然都为零最好),fre一般不要底到120.

    ++IO调整优化
    cat /sys/block/sda/queue/scheduler #确定正在使用的是哪个 I/O 调度程序
    在 grub.conf的相应启动选项里加入elevator=deadline,如:
    kernel /vmlinuz-2.6.6 ro root=/dev/sda6 elevator=deadline
    #Deadline的I/O调度器,在数据吞吐量非常大的数据库系统中表现得 更有优势。

    ++各瓶径判断方向
    用iostat、sar、tprof检测是否是CPU原因
    用vmstat、svmon检测是否是内存原因
    用 filemon、iostat检测是否是硬盘原因
    用netstat 、nfsstat检测是否是网络原因
    ++一些概念
    Pageout 指的是磁盘上内存页从物理内存到 Swap 空间的转移
    svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
    %util: 一秒中有百分之多少的时间用于 I/O 操作

  • 相关阅读:
    React-精华版
    国内优秀npm镜像推荐及使用
    GitHub 配置指南
    Nodejs之WebSocket
    js验证连续两位数字递增或递减和连续三位数字相同
    JS魔法堂:LINK元素深入详解
    phpstorm将多个int数字拼接成字符串
    php中使用curl来post一段json数据
    MySQL索引使用:字段为varchar类型时,条件要使用''包起来
    MySQL中enum类型数据,要传入字符串
  • 原文地址:https://www.cnblogs.com/feihongwuhen/p/7170730.html
Copyright © 2020-2023  润新知