一、内存调优
[root@server-mysql ~]# cat /proc/sys/vm/dirty_background_ratio
10
[root@server-mysql ~]# cat /proc/sys/vm/swappiness
60
swappiness表示使用swap分区的使用程度,可以适当调整swappiness=0的时候表示尽可能使用物理内存swap空间.swappiness=100积极使用swap.
[root@server-mysql ~]# cat /proc/sys/vm/dirty_ratio
20
二、磁盘I/O调优
一)、 概述
- # blockdev --getra /dev/sda
- # blockdev --setra 512 /dev/sda
- # cat /sys/block/sda/queue/nr_requests
- 512
二)、 磁盘I/O的4种调度算法
- # /sys/block/sda/queue/iosched/queued:轮询时每次处理的最大请求数
- # /sys/block/sda/queue/iosched/quantum:每隔多少个请求数做一次轮询
- # ionice -c1 -n7 -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300&
- # ionice -c2 -n3 -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300&
- # ionice -c3 -n0 -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300&
- # echo deadline >/sys/block/sda/queue/scheduler
- # more /sys/block/sda/queue/scheduler
- noop anticipatory [deadline] cfq
- # ls /sys/block/sda/queue/iosched/
- fifo_batch front_merges read_expire write_expire writes_starved
- # cat iosched/read_expire
- 500 #默认500ms
- # cat iosched/write_expire
- 5000 #默认5000ms
- # cat iosched/front_merges
- 1
- # echo "anticipatory">/sys/block/sda/queue/scheduler
- # more iosched/antic_expire
- 6 #默认为6秒
- # more /sys/block/sda/queue/iosched/read_expire
- 125 #读的最大队列时间
- # more /sys/block/sda/queue/iosched/write_expire
- 250 #写的最大队列时间
- 注:测试时一定要清空缓存
- # free –m #查看缓存
- total used free shared buffers cached
- Mem: 4054 506 3548 0 140 256
- -/+ buffers/cache: 108 3945
- Swap: 8189 0 8189
- # sysctl -w vm.drop_caches=3 #清空缓存
- # rpm –ivh elevator-test-0.1-3.i386.rpm #安装测试软件
- # dd if=/dev/urandom of=/root/bigfile bs=1M count=100
- # watch –n 1 ls –lh /root/bigfile #每隔一秒查写入bigfile的数据量
- 默认调度类型为cfq下,测试读数据速度(测试时要求清空缓存)
- # cat /sys/block/sda/queue/scheduler
- noop anticipatory deadline [cfq]
- et_start reader /root/bigfile
- Launching
- Reading 25600 pages
- Read 20000 pages
- real 0m1.552s
- user 0m0.011s
- sys 0m0.147s
- 将调度类型改为anticipatory,测试读数据速度(测试时要求清空缓存)
- # echo “anticipatory”>/sys/block/sda/queue/scheduler
- noop anticipatory deadline [anticipatory]
- # cat /sys/block/sda/queue/iosched/antic_expire
-
12 #该值默认为6,为提高速度,改成12et_start reader /root/bigfileLaunchingReading 25600 pagesRead 20000 pagesreal 0m1.456suser 0m0.007ssys 0m0.144s结论:很明显读的数度提高了。
4. NOOP(电梯式调度程序)(elevator=noop):
特点:
不做任何调优,主要用于节省CPU资源。
Noop调度算法指的是当请求被存储到队列并交由I/O子系统处理时由磁盘硬件对其进行优化。该算法一般只对一些特定的硬件(例如RAM disk和TCQ disk等)。
Noop对于I/O不那么操心,对所有的I/O请求都用FIFO队列形式处理,默认认为 I/O不会存在性能问题。这也使得CPU也不用那么操心
三)、 I/O调度算法使用建议
1. Deadline I/O scheduler
在这个中 deadline 调度算法通过降低性能而获得更短的等待时间,它使用轮询的调度器,简洁小巧,提供了最小的读取延迟
和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库,Oracle 10G 之类).
2. Anticipatory I/O scheduler
anticipatory 算法通过增加等待时间来获得更高的性能,假设一个块设备只有一个物理查找磁头(例如一个单独的SATA硬盘),将多个随机的小写入流合并成一个大写入流(相当于给随机读写变顺序读写), 使用这个原理来使用读取写入的延时换取最大的读取写入吞吐量.适用于大多数环境,特别是读取写入较多的环境,比如文件服务器,Web 应用,App等应用我们可以采纳as调度.后面我会教大家怎么调这个的合并的等待时间。
3. CFQ I/O scheduler
这个是 对所有因素也都做了折中而尽量获得公平性,使用QoS策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为是上述两种调度器的折中.适用于有大量进程的多用户系统。
四、 sysctl.conf参数的调整
- 查看TIME_WAIT的数量
- # netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
- 优化
- # vim /etc/sysctl.conf
- net.ipv4.tcp_syncookies = 1 //开户SYN Cookies,当出现等待队列溢出时,启用cookies来处理,防范少量SYN攻击
- net.ipv4.tcp_tw_reuse = 1 //开户重用,允许TIME_WAIT sockets重新用于新的TCP连接
- net.ipv4.tcp_tw_recycle = 1 //开户TCP连接中TIME_WAIT sockets的快速回收
- net.ipv4.tcp_fin_timeout = 30 //修改TIMEOUT的时间
- net.ipv4.tcp_keepalive_time = 1200 //当keepalive起作用的时候,TCP发送keepalive消息的频度,缺少是2小时,改为20分钟
- net.ipv4.ip_local_port_range = 10000 65000 //修改端口范围,允许更多的连接
- net.ipv4.tcp_max_syn_backlog = 8192 //SYN队列的长度,默认为1024,加大队列长度为8192,以容纳更多等待连接的网络连接
- net.ipv4.tcp_max_tw_buckets = 5000 //系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立即被清除
- net.core.netdev_max_backlog = 32768 //每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
- net.core.somaxconn = 32768 //web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值。
- net.ipv4.tcp_wmem = 8192 436600 873200 //TCP写buffer
- net.ipv4.tcp_rmem = 32768 436600 873200 //TCP读buffer
- net.inet.tcp.sendspace=65536 //最大的待发送TCP数据缓冲区空间
- net.inet.tcp.recvspace=65536 //最大的接受TCP缓冲区空间
- net.inet.udp.sendspace=65535 //最大的接受UDP缓冲区大小
- net.inet.udp.maxdgram=65535 //最大的发送UDP数据缓冲区大小
- net.local.stream.sendspace=65535 //本地套接字连接的数据发送空间
- 最后使用命令sysctl让其生效
- # sysctl -p
五、 网络调优
- 1.安装软件
- apt-get install ifenslave
- 2.修改配置文件
- /etc/network/interfaces
- auto lo
- iface lo inet loopback
- iface eth0 inet dhcp
- iface eth1 inet dhcp
- auto bond0
- iface bond0 inet static
- address 64.0.177.20
- netmask 255.255.255.0
- gateway 64.0.177.254
- up ifenslave bond0 eth0 eth1
- down ifenslave -d bond0 eth0 eth1
- 3.加载模块
- vi /etc/modules
- bonding
六 nginx调优
一)、配置文件调优
- worker_processes 8; //nginx进程数,建议按照cpu数目来指定,一般为它的倍数。
- worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; //为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。
- worker_rlimit_nofile 102400; //这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
- use epoll; //使用epoll的I/O模型,这个不用说了吧.
- worker_connections 102400; //每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。
- keepalive_timeout 60; //keepalive超时时间。
- limit_rate_after 2m;
- //限制速度,当用户请求的文件超过2M的时候,开始限速,限制为128k
- limit_rate 128k;
二)、安装插件调优
- # tar xnf libunwind-0.99.tar.gz
- # cd libunwind-0.99/
- # CFLAGS=-fPIC ./configure
- # make CFLAGS=-fPIC
- # make CFLAGS=-fPIC install
- # tar xvf google-perftools-1.9.tar.gz
- # cd google-perftools-1.9/
- # ./configure
- # make && make install
- # echo "/usr/local/lib“ >> /etc/ld.so.conf.d/usr_local_lib.conf
- # ldconfig
- # ./configure --with-google_perftools_module --with-http_stub_status_module --with-http_ssl_module --prefix=/usr/local/webserver/nginx
- # make
- # make install
- # mkdir /tmp/tcmalloc
- # chmod 0777 /tmp/tcmalloc
- 修改nginx.conf文件,在pid这行的下面添加如下代码:
- google_perftools_profiles /tmp/tcmalloc;
- 为了验证google-perftools已经正常加载,可通过如下命令查看:
- lsof -n | grep tcmalloc
Nginx下载服务生产服务器调优的更多相关文章
-
nginx服务器调优
nginx服务器调优措施总结: 1.选择合适的网络IO模型 epoll select poll 2.配置合适的启动进程数和每个进程处理请求的工作线程数 3.启用gzip压缩以减小通信量以减少网络IO ...
-
jvm系列(六):Java服务GC参数调优案例
本文介绍了一次生产环境的JVM GC相关参数的调优过程,通过参数的调整避免了GC卡顿对JAVA服务成功率的影响. 这段时间在整理jvm系列的文章,无意中发现本文,作者思路清晰通过步步分析最终解决问题. ...
-
Nginx源码安装及调优配置
导读 由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置. Nginx编译前的优 ...
-
Nginx源码安装及调优配置(转)
导读 由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置. Nginx编译前 ...
-
Nginx 源码安装和调优
常见web架构: LAMP =Linux+Apache+Mysql+PHP LNMP =Linux+Nginx+Mysql+PHP nginx概述: 知道:1 不知道:2 Nginx (&q ...
-
Nginx安全优化与性能调优
目录 Nginx基本安全优化 隐藏Nginx软件版本号信息 更改源码隐藏Nginx软件名及版本号 修改Nginx服务的默认用户 修改参数优化Nginx服务性能 优化Nginx服务的worker进程数 ...
-
记一次Web服务的性能调优
前言 一个项目在经历开发.测试.上线后,当时的用户规模还比较小,所以刚刚上线的项目一般会表现稳定.但是随着时间的推移,用户数量的增加,qps的增加等因素会造成项目慢慢表现出网页半天无响应的状况.在之前 ...
-
Hadoop企业开发场景案例,虚拟机服务器调优
Hadoop企业开发场景案例 1 案例需求 (1)需求:从1G数据中,统计每个单词出现次数.服务器3台,每台配置4G内存,4核CPU,4线程. (2)需求分析: 1G/128m = 8个M ...
-
(转)Linux服务器调优
Linux内核参数 http://space.itpub.net/17283404/viewspace-694350 net.ipv4.tcp_syncookies = 1 表示开启SYN Cooki ...
随机推荐
-
POJ 2752 Seek the Name, Seek the Fame [kmp]
Seek the Name, Seek the Fame Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17898 Ac ...
-
自定义View其实很简单系列1-12
作者: AigeStudio http://blog.csdn.net/aigestudio 说明:文中的1/12表示12篇中的第1篇, 1/6=2/12表示12篇中的第2篇,其它类似. 自定义控件 ...
-
js获取页面高度赋值给div
<script type="text/javascript"> window.onload=function(){ map_width=document.body.cl ...
-
VMware vSphere 服务器虚拟化之十八桌面虚拟化之安装View Composer服务器
VMware vSphere 服务器虚拟化之十八桌面虚拟化之安装View Composer服务器 View Compose服务可安装在管理虚拟机的vC ...
-
json-smart 使用示例
json-smart 使用示例 json是一种通用的数据格式.相比与protocal buffer.thrift等数据格式,json具有可读性强(文本).天生具备良好的扩展性(随意增减字段)等优良特点 ...
-
Python第三方库的安装 --Python3
1.使用安装包管理工具安装:easy_install .pip/pip3 easy_install:easy_install是由PEAK(Python Enterprise Application K ...
-
修改 计算机名后,修改SQLserver 注册服务器对象的名称,及登陆名
select @@ServerName --查看当前所有数据库服务器名称select * from Sys.SysServers --修改数据库服务器名称sp_dropserver 'old_serv ...
-
svg-edit和svg中的自定义属性
用svg的码农们肯定知道,在path.rect等元数据中会加入一些自定义属性,保存于数据库,但是用svg-edit编辑器时, 读取的时候,无法读取些这些自定义属性.解决办法:找sanitize.js文 ...
-
php判断文件夹是不是存在
function MkFolder($path){ if(!is_readable($path)){ MkFolder( dirname($path) ); if(!is_file ...
-
转 Kafka docker
Kafka 教程 http://haofly.net/kafka/ Posted on 2016-12-23 | In tools | | Views: 224 重要概念 生产者(Produc ...