美文网首页Py
性能调优

性能调优

作者: 性能之道 | 来源:发表于2017-08-09 19:26 被阅读0次

    1.1.1.  调优原因

    应用服务器: 暂时无瓶颈

    mysql服务器

    db出现严重的IO瓶颈,

    调优前外部表现:

    1.1.2.  分析过程

    系统调优由易到难的先后顺序如下:

    1.        硬件问题

    2.        网络问题

    3.        应用服务器、数据库等配置问题

    4.        源代码、数据库脚本问题

    5.        系统构架问题

    通过后他命令vmstat  2

    1 系统级IO监控

    %util        代表磁盘繁忙程度。100% 表示磁盘繁忙, 0%表示磁盘空闲。但是注意,磁盘繁忙不代表磁盘(带宽)利用率高

    argrq-sz    提交给驱动层的IO请求大小,一般不小于4K,不大于max(readahead_kb, max_sectors_kb)

    可用于判断当前的IO模式,一般情况下,尤其是磁盘繁忙时, 越大代表顺序,越小代表随机

    svctm        一次IO请求的服务时间,对于单块盘,完全随机读时,基本在7ms左右,既寻道+旋转延迟时间

    注: 各统计量之间关系

    =======================================

    %util = ( r/s  +  w/s) * svctm / 1000                        # 队列长度 =  到达率    *  平均服务时间

    avgrq-sz = ( rMB/s + wMB/s) * 2048 / (r/s  + w/s)    # 2048 为 1M / 512

    =======================================

    总结:

    iostat 统计的是通用块层经过合并(rrqm/s, wrqm/s)后,直接向设备提交的IO数据,可以反映系统整体的IO状况,但是有以下2个缺点:

    1  距离业务层比较遥远,跟代码中的write,read不对应(由于系统预读 + pagecache + IO调度算法等因素, 也很难对应)

    2  是系统级,没办法精确到进程,比如只能告诉你现在磁盘很忙,但是没办法告诉你是谁在忙,在忙什么?

    分析结果:

    2 进程级IO监控

    iotop 和 pidstat (仅rhel6u系列)

    iotop    顾名思义, io版的top

    pidstat 顾名思义, 统计进程(pid)的stat,进程的stat自然包括进程的IO状况

    这两个命令,都可以按进程统计IO状况,因此可以回答你以下二个问题

    当前系统哪些进程在占用IO,百分比是多少?

    占用IO的进程是在读?还是在写?读写量是多少?

    pidstat -u -r -d -t 1

    3 业务级IO监控

        ioprofile

        ioprofile 命令本质上是 lsof + strace, 具体下载可见 http://code.google.com/p/maatkit/

        ioprofile 可以回答你以下三个问题:

        1  当前进程某时间内,在业务层面读写了哪些文件(read, write)?

        2  读写次数是多少?(read, write的调用次数)

        3  读写数据量多少?(read, write的byte数)

    4 文件级IO监控

        文件级IO监控可以配合/补充"业务级和进程级"IO分析

          文件级IO分析,主要针对单个文件, 回答当前哪些进程正在对某个文件进行读写操作.

          1 lsof  或者  ls /proc/pid/fd

          2 inodewatch.stp

    lsof  告诉你 当前文件由哪些进程打开

    1.1.3.  调优过程

    1.db调优,针对目前MariaDB的参数修改调整,通过压测调整 (2天)

    修改前文件空

    参数修改:

    [root@host-172-19-1-27 my.cnf.d]# vim /etc/my.cnf.d/server.cnf

    [server]

    [mysqld]

    slow_query_log = on      //慢sql开关打开

    long_query_time = 1      //设定确认慢sql阈值

    slow_query_log_file=/tmp/slow.log.last      //导出慢sql路径

    log_slow_verbosity=query_plan

    symbolic-links=0

    character_set_server=utf8

    skip-name-resolve

    back_log = 1500

    max_connections = 2000

    max_connect_errors = 6000

    table_open_cache = 8000

    max_allowed_packet = 1024M

    binlog_cache_size = 1M

    max_heap_table_size = 256M

    tmp_table_size = 256M

    innodb_checksums=0

    innodb_use_native_aio=1

    read_buffer_size = 8M

    read_rnd_buffer_size = 8M

    sort_buffer_size = 8M

    join_buffer_size = 8M

    key_buffer_size = 256M

    thread_cache_size = 8

    query_cache_size = 128M

    query_cache_limit = 32M

    ft_min_word_len = 4

    log_bin = mysql-bin

    relay-log=relay-log-bin

    server-id=1

    log-slave-updates=true

    sync-master-info=1

    binlog-checksum=CRC32

    master-verify-checksum=1

    slave-sql-verify-checksum=1

    report-port=3306

    report-host=10.214.129.187

    binlog_format = ROW

    expire_logs_days = 7

    log_error = mysql-error.log

    skip-external-locking

    default_storage_engine = InnoDB

    innodb_flush_method=O_DIRECT

    innodb_file_per_table = 1

    innodb_open_files = 4000

    innodb_buffer_pool_size = 12288M

    innodb_thread_concurrency = 0

    innodb_flush_log_at_trx_commit = 0

    innodb_log_buffer_size = 64M

    innodb_log_file_size = 1024M

    innodb_log_files_in_group = 3

    innodb_max_dirty_pages_pct = 90

    innodb_lock_wait_timeout = 120

    innodb_read_io_threads = 4

    innodb_write_io_threads = 4

    innodb_doublewrite=0

    innodb_support_xa=0

    bulk_insert_buffer_size = 64M

    myisam_sort_buffer_size = 8M

    myisam_max_sort_file_size = 1G

    myisam_repair_threads = 1

    interactive_timeout = 2880000

    wait_timeout = 2880000

    collation-server=utf8_general_ci

    [galera]

    [embedded]

    [mariadb]

    [mariadb-10.1]

    //后面为原始值

    #skip-external-locking

    #key_buffer_size = 256M

    #max_allowed_packet = 1M

    #table_open_cache = 256

    #sort_buffer_size = 1M

    #read_buffer_size = 1M

    #read_rnd_buffer_size = 4M

    #myisam_sort_buffer_size = 64M

    #thread_cache_size = 8

    #query_cache_size= 16M

    #log-bin=mysql-bin

    #server-id=1

    #binlog-format=ROW

    #character-set-server=utf8

    #collation-server=utf8_general_c

    2.容器调优,针对目前tomcat的参数调整,通过压测调整  (2天)

     

       

    protocol="org.apache.coyote.http11.Http11NioProtocol"

    connectionTimeout="20000"  //

    redirectPort="9443"

    2              maxThreads="4000"      //调整线程的数目

    minSpareThreads="4000"

    maxSpareThreads="4500"

    acceptCount="4100"

    1              enableLookups="false"    //停用DNS 查询

    debug="0"

    />

       

       

    3.      //--配置引擎--

    3.OS调优,确定os 相关性能参数调整(TCP limit ,文件页大小) (1天)

    4.硬件方面,根据具体情况调查online硬件参数,cpu多核亲和性,IO硬件参数。 (1天)

    app:

    cpu: Intel Core Processor (Haswell, no TSX)  8core

    memory: 16g

    disk: 65g

    db:

    cpu: Intel Core Processor (Haswell, no TSX) 8core

    memory: 16g

    disk: 65g

    5.日志配置对系统性能影响 (0.5天)

    1.1.4.  调优结果

                         

     

    相关文章

      网友评论

        本文标题:性能调优

        本文链接:https://www.haomeiwen.com/subject/zzbqrxtx.html