文档章节

服务器性能优化(一):linux系统调优

stone_
 stone_
发布于 2015/10/29 16:33
字数 2674
阅读 144
收藏 24
点赞 0
评论 0

 简单的排除方法。

查看一下 Web 服务器上的中央处理单元(CPU)使用率,就可以了解 CPU 是否负载过重。

查看过去使用的总带宽并推断未来的变化,可以帮助判断什么时候需要进行网络升级。这些度量最好与其他度量和观测结合考虑。例如,当用户抱怨应用程序太慢时,可以检查磁盘操作是否达到了最大容量。


1. curl的应用

[root@localhost]# curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} www.baidu.com
0.356:0.637:1.611

对 www.baidu.com执行curl命令,输出通常是html代码,通过 -o参数将html代码发送到/dev/null。-s去除掉所有的状态信息,-w参数是让curl列出计时器的状态信息:

0.356  建立到服务器的 TCP 连接所用的时间 

0.637 在发出请求之后,Web 服务器返回数据的第一个字节所用的时间

1.611 完成请求所用的时间

web服务器处理请求并开始返回数据所用的时间  : 0.637 - 0.356= 0.281s.

客户端从服务器下载数据所用的时间是: 1.611 - 0.637 = 0.974s.

通过观察curl数据及其随时间变化的趋势,可以很好的了解网站对用户响应性.

2. uptime的应用。

[root@localhost]# uptime
 15:17:03 up 85 days, 24 min,  1 user,  load average: 0.26, 1.71, 1.63

load average后的3个数字,分别代表系统最近一分钟,五分钟,十五分钟的系统负载.

3. sar的应用。

[root@localhost]# sar -u 1 3

Linux 2.6.32-504.8.1.el6.x86_64 (host-172-28-5-131)     10/29/2015      _x86_64_        (4 CPU)
03:19:38 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
03:19:39 PM     all      1.25      0.00      0.75      0.25      0.00     97.76
03:19:40 PM     all      1.01      0.00      0.25     15.08      0.00     83.67
03:19:41 PM     all      1.00      0.00      0.50      1.00      0.25     97.26
Average:        all      1.08      0.00      0.50      5.42      0.08     92.92

%user: 在用户模式中运行进程所花的时间比。

%nice :  运行正常进程所花的时间.

%system: 在内核模式(系统)中运行进程所花的时间。

%iowait:没有进程在该CPU上执行时,处理器等待I/O完成的时间

%idle:没有进程在该CPU上执行的时间

1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈

2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量

3. 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU 。

[root@locahost]# sar -d  10 3
Linux 2.6.32-504.8.1.el6.x86_64 (host-172-28-5-131)     10/29/2015      _x86_64_        (4 CPU)

03:22:02 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
03:22:12 PM  dev252-0      9.64     57.66    119.39     18.36      0.06      6.42      2.93      2.82
03:22:12 PM dev252-16      8.43      0.00     75.53      8.96      0.06      7.24      0.46      0.39
03:22:12 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:22:12 PM  dev253-0     14.72      0.00    117.77      8.00      0.09      5.92      0.39      0.58
03:22:12 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

03:22:12 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
03:22:22 PM  dev252-0      3.42     29.75     66.73     28.24      0.04     10.94      8.12      2.77
03:22:22 PM dev252-16      1.21      0.00      8.04      6.67      0.00      3.00      2.33      0.28
03:22:22 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:22:22 PM  dev253-0      4.12      0.00     32.96      8.00      0.01      1.95      1.07      0.44
03:22:22 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

03:22:22 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
03:22:32 PM  dev252-0      2.93     13.74     43.64     19.59      0.02      5.34      4.52      1.32
03:22:32 PM dev252-16      2.12     87.27     14.55     48.00      0.01      3.90      2.38      0.51
03:22:32 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:22:32 PM  dev253-0      7.78     99.39     50.91     19.32      0.02      3.08      1.40      1.09
03:22:32 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:     dev252-0      5.32     33.67     76.50     20.71      0.04      7.20      4.34      2.31
Average:    dev252-16      3.91     29.09     32.59     15.79      0.02      6.20      1.00      0.39
Average:      dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-0      8.86     33.13     67.07     11.32      0.04      4.47      0.79      0.70
Average:     dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

tps  : 每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的

rd_sec/s : 每秒读扇区的次数.

wr_sec/s:每秒写扇区的次数.

avgrq-sz:平均每次设备I/O操作的数据大小(扇区).

avgqu-sz:磁盘请求队列的平均长度.

await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒).

svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.

%util:I/O请求占CPU的百分比,比率越大,说明越饱和

1. avgqu-sz 的值较低时,设备的利用率较高。

2. 当%util的值接近 1% 时,表示设备带宽已经占满

3) 要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来

1.怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看

2.怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看

3.怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看

4. top。


大多数 Linux 发布版都定义了适当的缓冲区和其他 Transmission Control Protocol(TCP)参数。可以修改这些参数来分配更多的内存,从而改进网络性能。设置内核参数的方法是通过 proc 接口,也就是通过读写 /proc 中的值。幸运的是,sysctl 可以读取/etc/sysctl.conf 中的值并根据需要填充 /proc,这样就能够更轻松地管理这些参数.


1).添加/etc/sysctl.conf中的参数

# Use TCP syncookies when needed

net.ipv4.tcp_syncookies = 1

# Enable TCP window scaling

net.ipv4.tcp_window_scaling: = 1

# Increase TCP max buffer size

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

# Increase Linux autotuning TCP buffer limits

net.ipv4.tcp_rmem = 4096 87380 16777216 

net.ipv4.tcp_wmem = 4096 65536 16777216

# Increase number of ports available 

net.ipv4.ip_local_port_range = 1024 65000 

将这些设置添加到 /etc/sysctl.conf 的现有内容中。


第一个设置启用 TCP SYN cookie。当从客户机发来新的 TCP 连接时,数据包设置了 SYN 位,服务器就为这个半开的连接创建一个条目,并用一个 SYN-ACK 数据包进行响应。在正常操作中,远程客户机用一个 ACK 数据包进行响应,这会使半开的连接转换为全开的。有一种称为 SYN 泛滥的网络攻击,它使 ACK 数据包无法返回,导致服务器用光内存空间,无法处理到来的连接。SYN cookie 特性可以识别出这种情况,并使用一种优雅的方法保留队列中的空间。大多数系统都默认启用这个特性,但是确保配置这个特性更可靠。


第二个设置是启用tcp窗口伸缩使客户机能够以更高的速度下载数据。tcp允许在未从远程端收到确认的情况下发送多个数据包,默认设置最多使64k,在与延迟比较大的远程机进行通讯时这个设置是不够。窗口伸缩会在头中启用更多的位,从而增加窗口大小.

后面4个配置项是增加tcp发送和接收缓存区。这使得运用程序可以更快丢掉它的数据,从而为另一个请求服务.还可以强化远程客户机在服务器繁忙时发送数据的能力。


最后一个配置是增加可用的本地端口数量,这样就增加了可以同时服务的最大连接数量. 运行 sysctl -p  /etc/sysctl.conf ,这样设置就会生效.


   2)磁盘调优


 磁盘在 LAMP 架构中扮演着重要的角色。静态文件、模板和代码都来自磁盘,组成数据库的数据表和索引也来自磁盘。对磁盘的许多调优(尤其是对于数据库)集中于避免磁盘访问,因为磁盘访问的延迟相当高.


  首先要在文件系统上禁用atime日志记录特性.atime是最近访问文件的时间,每当访问文件时,底层文件系统必须记录这个时间戳。因为我们很少使用atime,禁用它可以减少磁盘的访问时间. 禁用该特性的方法是,在/etc/fstab的第四列中添加noatime。

  如何启用 noatime 的 fstab 示例


/dev/mapper/VolGroup-lv_root /                       ext4    defaults,noatime       1 1

UUID=ba007d22-b42b-4b1e-9301-eec5535dffe1 /boot                   ext4    defaults,noatime        1 2

/dev/mapper/VolGroup-LogVol02 /opt                    ext4    defaults,noatime        1 2

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0


上述修改了 ext4 文件系统,因为 noatime 只对驻留在磁盘上的文件系统有帮助。为让这一修改生效,不需要重新引导;只需重新挂装每个文件系统,  运行 mount / -o remount。


可以使用 hdparm 命令查明和设置用来访问 IDE 磁盘的方法。hdparm -t /path/to/device 执行速度测试,可以将这个测试结果作为性能基准。为了使结果尽可能准确,在运行这个命令时系统应该是空闲的.


在/dev/sda 上执行的速度测试


  # hdparm -t /dev/sda


/dev/sda:


   Timing buffered disk reads:  290 MB in  3.18 seconds =  91.27 MB/sec

这一测试说明,在这个磁盘上读取数据的速度是大约每秒 91.27 MB。


  3) I/O调优


    在/etc/grub.conf中加入相应的I/O调度算法.


   I/O调度算法总共有4种.


   1.deadline算法 (适合小文件读写,跳跃式读写,零散读写,适合吞吐量非常大的运用)(数据库)

   2. anticipatory算法      (适合大文件读写,整块式,重复读写)   (web server)

   3. cfg算法  (完全公平算法)

    4. noop算法  (没有算法)


   将I/o调度算法改为deadline算法.

   echo  deadline > /sys/block/sda/queue/scheduler     


 4)将访问数超过150的ip加上防火墙

#!/bin/sh
status=`netstat -na|awk '5 ~ /[0-9]+:[0-9]+/ {print5}' |awk -F ":" -- '{print $1}' |sort -n|uniq -c |sort -n|tail -n 1`
NUM=`echo status|awk '{print1}'`
IP=`echo status|awk '{print2}'`
result=`echo "$NUM > 150" | bc`
if [ $result = 1 ];then
    echo IP:IPisoverNUM, BAN IT!
    /sbin/iptables -I INPUT -s $IP -j DROP
fi

将该shell脚本加入crontab中,5秒运行一次.


5)查看apache的并发请求数及其tcp连接状态:

[fanlinlin@weirenmai-dev ~]netstat -nat|awk '{print $NF}'|sort|uniq -c|sort -n
      1 established)
      1 State
      3 LAST_ACK
      4 FIN_WAIT2
     11 SYN_SENT
     14 LISTEN
     19 CLOSE_WAIT
     43 FIN_WAIT1
    244 SYN_RECV
    696 TIME_WAIT
   1126 ESTABLISHED


 上述参数的描述


 SYN_RECV    : 表示正在等待处理的请求数.

ESTABLISHED : 表示正常数据传输状态 

TIME_WAIT   : 表示处理完毕,等待超时结束的请求数。


© 著作权归作者所有

共有 人打赏支持
stone_
粉丝 19
博文 163
码字总数 163611
作品 0
洛阳
程序员
性能调优概述

大纲: 一、概述 二、什么是性能调优?(what) 三、为什么需要性能调优?(why) 四、什么时候需要性能调优?(when) 五、什么地方需要性能调优?(where) 六、什么人来进行性能调优?(who) 七、怎...

陈明乾 ⋅ 2014/07/14 ⋅ 0

第1章 Java性能调优概述

1.1 性能概述 1.1.1 看懂程序的性能 什么是Full GC? Full GC是指发生在Java堆老年代的GC,会发生Stop The World程序假死现象。 以WEB服务器为例,服务器的响应时间,吞吐量就是两个重要的性...

陶邦仁 ⋅ 2015/01/13 ⋅ 2

HDNL性能调优(4)故障点分析与工具准备

为深入调查系统运行状况,我们从CPU、内存、磁盘I/O等方面对各服务器的运行情况进行了指标收集和分析,具体情况如下: 为保证调优结果必须体现在迭代测试的过程中,我们对故障点的诊断采用了...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

JVM性能调优实践——JVM篇

前言 在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践...

lijingyao8206 ⋅ 05/24 ⋅ 0

WEB服务器调优

1.操作系统参数优化:(1)硬件配置尽可能高配;(2)OS选型:Linux/Windows,32位/64位;若使用Linux,注意修改OPEN_FILES为65535,解决应用服务器too many open files 错误。 PS:带宽 等这...

hanzhankang ⋅ 2014/01/17 ⋅ 0

linux系统调优-存储(内存、硬盘)

首先一个基本概念: 存储系统存储速度的快->慢: 内存->闪存->磁盘 因为内存的价格限制以及操作系统支持的限制,我们只能从磁盘这块来看,可见磁盘正是存储系统的最大瓶颈所在。 **下面具体提...

疯狂的单纯酱 ⋅ 2015/08/21 ⋅ 0

Windows Server 2016进行性能调优?

  【IT168 技术】微软已发布了官方Windows Server 2016性能调优指南。这是一个全面的指南,提供了一系列技术文章,其中包含对IT专业人员的指导,提供对负责部署,操作和调优Windows Serve...

it168网站 ⋅ 2017/05/26 ⋅ 0

linux+Oracle集群课程全面升级

作为国内最早从事开源架构师级课程研发的公司,从2006年10月开始,荣新稳步提升,将互联网运维作为主导就业方向,并将Linux集群架构课程发展成为国内最顶级、覆盖技术最全面的Linux课程,作为...

张琦 ⋅ 2010/11/19 ⋅ 0

linux云计算是什么、云计算工程师需要准备什么知识

linux云计算是什么? 在云计算还没有兴起的时候! 如果你想建立一个网站,首先你得买一台服务器(电脑)! 用这台服务器来存储你网站上的内容,视频、图片、文字。。。。 一旦断电了,别人就...

wx5afbd95af0392 ⋅ 05/16 ⋅ 0

陈皓:性能调优攻略

关于性能优化这是一个比较大的话题,在《由12306.cn谈谈网站性能技术》中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级...

苗哥 ⋅ 2012/06/20 ⋅ 10

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部