Py

性能调优

2017-08-09  本文已影响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.  调优结果

                     

 

上一篇 下一篇

猜你喜欢

热点阅读