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.? 調優結果
? ? ? ? ? ? ? ? ? ? ?
?