linux架构师高级系统调优策略
一、進程管理
1、啟動流程
POST:啟動BIOS,加載硬件信息到CPU,完成各個設備的中斷注冊及IO端口注冊。讀取CMOS,確定啟動加載順序,啟動系統,如果是從硬盤啟動會讀取MBR分區。
2、什么是進程
程序的運行實例(現實表現),程序的一部分代碼而已。
CPU通過時序(時間片)讓多個任務(程序,進程)同時運行,實質在某一個時間點是只有一個在運行的。CPU通過進程調度器結合調度策略調度進程。
cpu密集型——批處理進程
i/o密集型———交互式進程
3、優先級調度
1-99 實時優先級,99優先級最高
調度方法:?chrt -f 99??/bin/ls
用戶空間級別的優先級調整
啟動時調整優先級:nice
啟動后調整優先級:renice
二、CPU性能統計
1、平均負載:
vmstate
[root@node5.dtedu.com ~]# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
?r? b ? swpd ? free ? buff? cache ? si ? so? ? bi? ? bo ? in ? cs us sy id wa st
?0? 0? ? ? 0 1555200? 18576 175188? ? 0? ? 0 ? ? 4 ? ? 0 ? 27 ? 29? 0? 0 100? 0? 0
?0? 0? ? ? 0 1555200? 18576 175208? ? 0? ? 0 ? ? 0 ? ? 0 ? 64 ? 55? 0? 0 100? 0? 0
?0? 0? ? ? 0 1555200? 18576 175208? ? 0? ? 0 ? ? 0 ? ? 0 ? 49 ? 53? 0? 0 100? 0? 0
?0? 0? ? ? 0 1555200? 18576 175208? ? 0? ? 0 ? ? 0 ? ? 0 ? 47 ? 49? 0? 0 100? 0? 0
?0? 0? ? ? 0 1554936? 18576 175208? ? 0? ? 0 ? ? 0 ? ? 0 ? 75? 118? 0? 0 100? 0? 0
w:隊列是對每一個cpu的,比如0.9,就是這個cpu的負載率是90%,所以
[root@node5.dtedu.com ~]# w
?08:18:38 up? 5:26,? 1 user,? load average: 1.00, 1.00, 0.91
USER ? ? TTY? ? ? FROM? ? ? ? ? ? ? LOGIN@ ? IDLE ? JCPU ? PCPU WHAT
root ? ? pts/0? ? 192.168.4.100? ? 08:18? ? 0.00s? 0.07s? 0.00s w
top
[root@node5.dtedu.com ~]# top
top - 08:18:34 up? 5:26,? 1 user,? load average: 1.00, 1.00, 0.91
Tasks: 129 total, ? 1 running, 128 sleeping, ? 0 stopped, ? 0 zombie
Cpu(s):? 0.2%us,? 0.2%sy,? 0.0%ni, 99.5%id,? 0.0%wa,? 0.2%hi,? 0.0%si,? 0.0%st
Mem: ? 1922096k total, ? 284196k used,? 1637900k free,? ? 17412k buffers
Swap:? 2064380k total,? ? ? ? 0k used,? 2064380k free,? ? 95280k cached
2、CPU性能評估
sar,yum install sysstat
[root@node5.dtedu.com ~]# sar -P ALL 10 2
Linux 2.6.32-573.el6.x86_64 (node5.dtedu.com)? 2017年05月16日? _x86_64_ (2 CPU)
08時36分58秒 ? ? CPU ? ? %user ? ? %nice ? %system ? %iowait? ? %steal ? ? %idle
08時37分08秒 ? ? all? ? ? 0.05? ? ? 0.00? ? ? 2.00? ? ? 0.05? ? ? 0.00 ? ? 97.90
08時37分08秒 ? ? ? 0? ? ? 0.10? ? ? 0.00? ? ? 2.20? ? ? 0.00? ? ? 0.00 ? ? 97.70
08時37分08秒 ? ? ? 1? ? ? 0.10? ? ? 0.00? ? ? 1.90? ? ? 0.00? ? ? 0.00 ? ? 98.00
08時37分08秒 ? ? CPU ? ? %user ? ? %nice ? %system ? %iowait? ? %steal ? ? %idle
08時37分18秒 ? ? all? ? ? 0.05? ? ? 0.00? ? ? 0.15? ? ? 0.00? ? ? 0.00 ? ? 99.80
08時37分18秒 ? ? ? 0? ? ? 0.00? ? ? 0.00? ? ? 0.20? ? ? 0.00? ? ? 0.00 ? ? 99.80
08時37分18秒 ? ? ? 1? ? ? 0.00? ? ? 0.00? ? ? 0.00? ? ? 0.00? ? ? 0.00? ? 100.00
平均時間: ? ? CPU ? ? %user ? ? %nice ? %system ? %iowait? ? %steal ? ? %idle
平均時間: ? ? all? ? ? 0.05? ? ? 0.00? ? ? 1.08? ? ? 0.03? ? ? 0.00 ? ? 98.85
平均時間: ? ? ? 0? ? ? 0.05? ? ? 0.00? ? ? 1.20? ? ? 0.00? ? ? 0.00 ? ? 98.75
平均時間: ? ? ? 1? ? ? 0.05? ? ? 0.00? ? ? 0.95? ? ? 0.00? ? ? 0.00 ? ? 99.00
[root@node5.dtedu.com ~]#?
dstat,yum install dstat
[root@node5.dtedu.com ~]# dstat
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr?sys?idl?wai?hiq?siq|?read??writ|?recv??send|? in???out?|?int???csw?
? 0 ? 0?100?? 0 ? 0 ? 0|9140B?1087B|?? 0 ? ? 0?|?? 0 ? ? 0?|? 54??? 57?
? 0 ? 0?100?? 0 ? 0 ? 0|?? 0 ? ? 0?|?126B??974B|?? 0 ? ? 0?|? 65??? 50?
? 0?? 1??99?? 0 ? 0 ? 0|?? 0 ? ? 0?|? 66B??420B|?? 0 ? ? 0?|? 75??? 59?
? 0 ? 0?100?? 0 ? 0 ? 0|?? 0 ??124k|? 66B??346B|?? 0 ? ? 0?|? 59??? 65?
? 0 ? 0?100?? 0 ? 0 ? 0|?? 0 ? ? 0?|? 66B??420B|?? 0 ? ? 0?|? 79??? 71?
? 1?? 0?100?? 0 ? 0 ? 0|?? 0 ? ? 0?|?126B??420B|?? 0 ? ? 0?|? 52??? 55?
vmstat ,如果里面的”CS”值在1000個以上說明“進程的上下文切換”太高。
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
?r? b ? swpd ? free ? buff? cache ? si ? so? ? bi? ? bo ? in ? cs us sy id wa st
?0? 0? ? ? 0 1536480? 22364 187316? ? 0? ? 0 ? ? 4 ? ? 1 ? 27 ? 29? 0? 0 100? 0? 0
?0? 0? ? ? 0 1536480? 22364 187316? ? 0? ? 0 ? ? 0 ? ? 0 ? 60 ? 53? 0? 1 100? 0? 0
查看進程運行在那顆cpu上。
[root@node5.dtedu.com ~]# watch -n1 'ps axo comm,pid,psr |grep saslauthd'
Every 1.0s: ps axo comm,pid,psr |grep saslauthd? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Tue May 16 08:48:30 2017
saslauthd? ? ? ? 1875 ? 1
saslauthd? ? ? ? 1877 ? 1
saslauthd? ? ? ? 1878 ? 1
saslauthd? ? ? ? 1879 ? 1
saslauthd? ? ? ? 1880 ? 1
當需要將某一個進程綁定到某個cpu上運行,減少進程在cpu之間的跳轉,可以通過taskset命令設置。
[root@node5.dtedu.com ~]# ps axo pid,comm,psr |grep 7156
?7156 httpd ? ? ? ? ? ? 0
[root@node5.dtedu.com ~]# taskset -c? -p 1 7156
pid 7156's current affinity list: 0,1
pid 7156's new affinity list: 1
[root@node5.dtedu.com ~]#?
三、內存調優
實際上調整的就是pdflush,這個主要負責內存中的數據更新到磁盤上的管理模塊。
? ? ?kswapd內存虛擬空間的啟動策略,
? ? ?slab allocator,內存空間如何分配。
內存空間區段使用情況:
32位系統:
zone_DMA:1-16M
ZONE_NORMAL:17-896M
ZONE_RESERVED:897-1024M
ZONE_HIGHMEM:
64位系統:
ZONE_DMA:1-1024M 1G
ZONE_DMA32:4G
ZONE_NORMAL:
查看系統區段信息:cat /proc/zoneinfo
[root@node6.dtedu.com ~]# cat /proc/zoneinfo?
Node 0, zone? ? ? DMA
? pages free ? ? 3924
? ? ? ? min? ? ? 83
? ? ? ? low? ? ? 103
? ? ? ? high ? ? 124
? ? ? ? scanned? 0
? ? ? ? spanned? 4080
? ? ? ? present? 3826
? ? nr_anon_transparent_hugepages 0 透明大頁面,用來改變內存最小存儲單位大小。通常小于1T的使用2M的巨型頁
? ? ? ? protection: (0, 2004, 2004, 2004)
? pagesets
? ? cpu: 0
? ? ? ? ? ? ? count: 0
? ? ? ? ? ? ? high:? 0
? ? ? ? ? ? ? batch: 1
? vm stats threshold: 4
? ? cpu: 1
? ? ? ? ? ? ? count: 0
? ? ? ? ? ? ? high:? 0
? ? ? ? ? ? ? batch: 1
? vm stats threshold: 4
? all_unreclaimable: 0
? prev_priority: ? ? 12
? start_pfn: ? ? ? ? 16
? inactive_ratio:? ? 1
Node 0, zone? ? DMA32
? pages free ? ? 377640
? ? ? ? min? ? ? 11180
? ? ? ? low? ? ? 13975
? ? ? ? high ? ? 16770
? ? ? ? scanned? 0
? vm stats threshold: 20
? ? cpu: 1
? ? ? ? ? ? ? count: 124
? ? ? ? ? ? ? high:? 186
? ? ? ? ? ? ? batch: 31
? vm stats threshold: 20
? all_unreclaimable: 0
? prev_priority: ? ? 12
? start_pfn: ? ? ? ? 4096
? inactive_ratio:? ? 3
注意:/proc目錄下的所以都可以通過man proc 進行查看相關目錄及文件的使用說明。
如果要清空buffer或者coach內容,可以
page caches:通常用來緩存文件的數據
Buffer :緩存文件的元數據,保存用戶需要寫道磁盤的數據信息。
echo >1 /proc/sys/vm/drop_caches? 釋放page caches
echo >2 /proc/sys/vm/drop_caches? 釋放buffer ?不建議
swap的使用
通常建議系統不使用swap空間,所以可以通過修改proc下swappiness進行設定,設定值0-100,數值越大使用可能性越高。
?
swap設置建議:
科學計算:4*RAM(內存)
數據庫服務:1G
應用服務器:0.5*RAM
oom標記
用來標記當內存空間告罄的情況下,對于高內存消耗的進程進行關閉的管理標記,通常這個是自動啟動的,也可以在內存沒有耗盡前手動啟動,或者對于高內存進程進行不標記操作。
比如:
1、關閉oom標記,/etc/sysctl.conf或者更改proc
[root@node6.dtedu.com ~]# echo 1 >/proc/sys/vm/panic_on_oom?
2、查看進程的oom標記
[root@node6.dtedu.com ~]# cat /proc/2214/oom_score
1
3、調整進程的oom標記,如果不想被殺死,進行使用小的數值。
[root@node6.dtedu.com ~]# cat /proc/2214/oom_adj?
0
4、手動啟動oom標記,刪除高消耗進程
[root@node6.dtedu.com ~]# echo f >/proc/sysrq-trigger?
內存檢測工具
1、vmstate?
[root@node6.dtedu.com ~]# vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
?r? b ? swpd ? free ? buff? cache ? si ? so? ? bi? ? bo ? in ? cs us sy id wa st
?0? 0? ? ? 0 1525180? 17400 207012? ? 0? ? 0 ? ? 2 ? ? 1 ? 28 ? 28? 0? 0 100? 0? 0
?0? 0? ? ? 0 1525164? 17400 207012? ? 0? ? 0 ? ? 0 ? ? 0 ? 68? 101? 0? 0 100? 0? 0
修改hugepage的大小,有助于提高TLB的性能,也可以用于快速緩存腳本信息。
啟動hugepages:
in /etc/sysctl.conf
vm_nr_hugepages = ?n
Kernel parameter
hugepages ?= n?
將huge當做內存磁盤來使用:
mkdir /hugepages
mount -t hugetlbfs ?none /hugepage
檢查swap使用情況,通常以下數值頻繁出現說明物理內存空間不足。
Linux 2.6.32-573.el6.x86_64 (node6.dtedu.com)? 2017年05月16日? _x86_64_ (2 CPU)
17時42分35秒? pswpin/s pswpout/s
17時42分36秒? ? ? 0.00? ? ? 0.00
17時42分37秒? ? ? 0.00? ? ? 0.00
17時42分38秒? ? ? 0.00? ? ? 0.00
[root@node6.dtedu.com ~]# dstat -mgs
------memory-usage----- ---paging-- ----swap---
?used??buff??cach??free|? in???out?|?used??free
?177M?20.7M??214M?1465M|?? 0 ? ? 0?|?? 0 ? ? 0?
?177M?20.7M??214M?1465M|?? 0 ? ? 0?|?? 0 ? ? 0?
?177M?20.7M??214M?1465M|?? 0 ? ? 0?|?? 0 ? ? 0?
?178M?20.7M??214M?1465M|?? 0 ? ? 0?|?? 0 ? ? 0?
?178M?20.7M??214M?1465M|?? 0 ? ? 0?|?? 0 ? ? 0?
?178M?20.7M??214M?1465M|?? 0 ? ? 0?|?? 0 ? ? 0?
?178M?20.7M??214M?1465M|?? 0 ? ? 0?|?? 0 ? ? 0?
內核、內存以及文件系統的容量調節/proc/sys/vm/
[root@node6.dtedu.com ~]# ls /proc/sys/vm/
admin_reserve_kbytes ? ? ? hugepages_treat_as_movable? mmap_min_addr ? ? ? ? ? ? panic_on_oom
block_dump ? ? ? ? ? ? ? ? hugetlb_shm_group ? ? ? ? ? nr_hugepages? ? ? ? ? ? ? percpu_pagelist_fraction
compact_memory ? ? ? ? ? ? laptop_mode ? ? ? ? ? ? ? ? nr_hugepages_mempolicy? ? scan_unevictable_pages
dirty_background_bytes ? ? legacy_va_layout? ? ? ? ? ? nr_overcommit_hugepages ? stat_interval
dirty_background_ratio ? ? lowmem_reserve_ratio? ? ? ? nr_pdflush_threads? ? ? ? swappiness
dirty_bytes? ? ? ? ? ? ? ? max_map_count ? ? ? ? ? ? ? numa_zonelist_order ? ? ? unmap_area_factor
dirty_expire_centisecs ? ? meminfo_legacy_layout ? ? ? oom_dump_tasks? ? ? ? ? ? vfs_cache_pressure
dirty_ratio? ? ? ? ? ? ? ? memory_failure_early_kill ? oom_kill_allocating_task? would_have_oomkilled
dirty_writeback_centisecs? memory_failure_recovery ? ? overcommit_kbytes ? ? ? ? zone_reclaim_mode
drop_caches? ? ? ? ? ? ? ? min_free_kbytes ? ? ? ? ? ? overcommit_memory
extfrag_threshold? ? ? ? ? min_slab_ratio? ? ? ? ? ? ? overcommit_ratio
extra_free_kbytes? ? ? ? ? min_unmapped_ratio? ? ? ? ? page-cluster
[root@node6.dtedu.com ~]#?
1、overcommit_memory
是否允許過量使用內存,也就是是否允許使用的內存空間大于實際物理內存空間其實就是是否使用swap。
設定值:
0:內核決定是否允許過量。內核計算過量值
1:內核允許使用過量內存
2:允許內核使用的過量值為物理內存、虛擬內存的
2、msgmax:消息隊列中單個消息的最大值
? ? ?Msgmnb:消息隊列的大小
? ? ?Msgmni:消息隊列的個數
? ? ?Shmall:一次在系統中可以使用的共享內存總量,通過他可以約束內存端個數(shmmax)。
? ? shmmni:用于共享內存的內存端個數(最多多少個內存端用于共享內存)
? ? shmmax:單個內存片段大小。
? ? Threads-max:規定內核使用的最大線程數,
3、同文件系統容量相關的參數
file-max:內存分配的最大句柄數
修改方法:
[root@node6.dtedu.com ~]# vi /etc/security/limits.conf?
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>? ? ? ? <type>? <item>? <value>
#
#Where:
4、調整內存優化
dirty_ratio:當某一個進程的數值達到總內存的百分比后就寫下臟數據(pdflush)
dirty_backgroud_ratio:當總進程的數值合計達到總內存的百分比后開始在后端就寫下臟數據(pdflush)
dirty_expire_centisecs:臟頁寫入磁盤的等待時間間隔
dirty_writeback_centisecs:數據在內存中的老化時間
調優參考文件:http://www.2cto.com/os/201407/315641.html
5、IO優化
io調度器調整方法:
queue_length:緩存區長度
[root@node6.dtedu.com ~]# cat /sys/block/sdb/queue/nr_requests?
128
max_read_ahead:一次讀取隊列內排隊消息個數
[root@node6.dtedu.com ~]# cat /sys/block/sdb/queue/read_ahead_kb?
128
修改默認調度器的調度算法:實時生效,永久有效要寫入的rc.local中。
[root@node6.dtedu.com ~]# ls /sys/block/sdb/queue/iosched/ //配置調度器算法的文件
back_seek_max? ? ? fifo_expire_async? group_idle ? ? ? low_latency? slice_async ? ? slice_idle
back_seek_penalty? fifo_expire_sync ? group_isolation? quantum? ? ? slice_async_rq? slice_sync
[root@node6.dtedu.com ~]# cat /sys/block/sdb/queue/scheduler? //可選調度算法及當前調度算法,【】內的為當前調度算法。
noop anticipatory deadline [cfq]?
back_seek_max:最大反向尋道。
back_seek_penalty:反向尋道出錯后懲罰系數
fifo_expire_async:異步請求等待時間
fifo_expire_sync:同步請求等待時間
壓力測試工具:
fio
iozone
磁盤狀態跟蹤記錄工具:yum install blktrace ? ,blkparse用于分析。
IO子系統優化和監控:http://www.codeceo.com/article/linxu-io-monitor.html
四、linux系統優化及文件系統優化
1、vfs
虛擬文件系統:用于實現程序同底層磁盤不同格式文件系統打交道的“文件系統”。
文件系統屬性:
inode
權限
大小
atime
mtime
ctime
lsattr
chattr
知識點:
追蹤命令執行過程中的詳細信息
[root@node6.dtedu.com ~]# strace ls
execve("/bin/ls", ["ls"], [/* 25 vars */]) = 0
brk(0)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? = 0x12d7000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f61b7ad8000
access("/etc/ld.so.preload", R_OK)? ? ? = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)? ? ? = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=54083, ...}) = 0
mmap(NULL, 54083, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f61b7aca000
close(3)? ? ??
。
。
。
。
。
查看磁盤文件系統相關信息塊碎片:
dumpe2fs
[root@node6.dtedu.com ~]# dumpe2fs /dev/sdb1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: ? <none>
Last mounted on:? ? ? ? ? /mnt
Filesystem UUID:? ? ? ? ? 2290a914-3116-477b-a72f-394c278b2aa9
Filesystem magic number:? 0xEF53
Filesystem revision #:? ? 1 (dynamic)
Filesystem features:? ? ? has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: ? ? ? ? signed_directory_hash?
Default mount options:? ? (none)
Filesystem state: ? ? ? ? clean
檢查一個文件是否是連續存儲在一個磁盤空間:filefrag
/root/install.log: 1 extent found[root@node6.dtedu.com ~]# filefrag /root/install.log -x
Filesystem type is: ef53
Filesystem cylinder groups is approximately 158
File size of /root/install.log is 8835 (3 blocks, blocksize 4096)
FIEMAP failed with unsupported flags 2
/root/install.log: 1 extent found[root@node6.dtedu.com ~]# filefrag /root/install.log -v
Filesystem type is: ef53
Filesystem cylinder groups is approximately 158
File size of /root/install.log is 8835 (3 blocks, blocksize 4096)
?ext logical physical expected length flags
?? 0 ? ? ? 0? 1433842 ? ? ? ? ? ? ? 2 merged
?? 1 ? ? ? 2? 1433844 ? ? ? ? ? ? ? 1 merged,eof
linux系統本事是可以避免碎片化的,所以不用進行碎片整理,如果非要整理使用fsck命令,非常消耗資源。
文件系統存儲存儲方式:
ext3:
journal:數據完整性最高,但是性能最差,通常不使用。
ordered:默認操作,數據寫入存儲區之前先寫入日志區確認無誤后再寫入數據區。
writeback:在ordered的基礎上,并不會立即寫入元數據區,而是自行選擇最佳寫入時機。性能好,一致性較差。
使用方法:
[root@node6.dtedu.com ~]# mount -o data=writeback /dev/sdb1 /mnt
ext4文件系統優化:
1、nobarriers,建議mysql數據庫存儲分區使用此參數進行掛載,mount -o nobarriers
2、noatime,對目錄和文件進行不更新時間戳操作。nodirtime只對目錄不更新。
3、預讀量設置,適用于大量連續讀寫情況。此值要和物理設備的預讀量相關,查看方式:
[root@node6.dtedu.com ~]# blockdev --getra /dev/sdb1
256
xfs文件系統優化
通常使用默認設定就是最佳方案了,并且建議mysql數據庫建立在xfs文件系統上。
五、網絡IO子系統優化
1、查看網絡端口打開狀態
[root@node7.dtedu.com ~]# netstat -tunlp //查看tcp/udp的監聽狀態端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address ? ? ? ? ? ? ? Foreign Address ? ? ? ? ? ? State ? ? ? PID/Program name? ?
tcp? ? ? ? 0? ? ? 0 10.40.0.227:21064 ? ? ? ? ? 0.0.0.0:* ? ? ? ? ? ? ? ? ? LISTEN? ? ? -? ? ? ? ? ? ? ? ? ?
tcp? ? ? ? 0? ? ? 0 0.0.0.0:111 ? ? ? ? ? ? ? ? 0.0.0.0:* ? ? ? ? ? ? ? ? ? LISTEN? ? ? 1383/rpcbind ? ? ? ?
tcp? ? ? ? 0? ? ? 0 0.0.0.0:57524 ? ? ? ? ? ? ? 0.0.0.0:* ? ? ? ? ? ? ? ? ? LISTEN? ? ? 1405/rpc.statd ? ? ?
tcp? ? ? ? 0? ? ? 0 0.0.0.0:22? ? ? ? ? ? ? ? ? 0.0.0.0:* ? ? ? ? ? ? ? ? ? LISTEN? ? ? 1546/sshd? ? ? ? ? ?
tcp? ? ? ? 0? ? ? 0 127.0.0.1:25? ? ? ? ? ? ? ? 0.0.0.0:* ? ? ? ? ? ? ? ? ? LISTEN? ? ? 1636/master?
[root@node7.dtedu.com ~]# netstat -tu //查看tcp/udp的建立連接的端口
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address ? ? ? ? ? ? ? Foreign Address ? ? ? ? ? ? State ? ? ?
tcp? ? ? ? 0? ? ? 1 node7.dtedu.com:41163 ? ? ? node5.dtedu.com:16851 ? ? ? SYN_SENT ? ?
tcp? ? ? ? 0? ? ? 0 node7.dtedu.com:ssh ? ? ? ? 10.40.0.222:65026 ? ? ? ? ? ESTABLISHED?
2、sar命令檢查方法:
[root@node7.dtedu.com ~]# sar -n SOCK 1 4
Linux 2.6.32-573.el6.x86_64 (node7.dtedu.com)? 2017年05月18日? _x86_64_ (1 CPU)
16時07分13秒? ? totsck? ? tcpsck? ? udpsck? ? rawsck ? ip-frag? ? tcp-tw
16時07分14秒 ? ? ? 218 ? ? ? ? 7 ? ? ? ? 7 ? ? ? ? 1 ? ? ? ? 0 ? ? ? ? 0
16時07分15秒 ? ? ? 218 ? ? ? ? 7 ? ? ? ? 7 ? ? ? ? 1 ? ? ? ? 0 ? ? ? ? 0
16時07分16秒 ? ? ? 218 ? ? ? ? 7 ? ? ? ? 7 ? ? ? ? 1 ? ? ? ? 0 ? ? ? ? 0
16時07分17秒 ? ? ? 218 ? ? ? ? 7 ? ? ? ? 7 ? ? ? ? 1 ? ? ? ? 0 ? ? ? ? 0
平均時間: ? ? ? 218 ? ? ? ? 7 ? ? ? ? 7 ? ? ? ? 1 ? ? ? ? 0 ? ? ? ? 0
totsock:系統持有的socket個數
tcpsck:當前正在使用的tcp協議的socket個數
Udpsck:
Romsck:ram正在使用的數量
ip-frag:正在使用的ip分片個數
Tcp-tw:當前正在使用的tcpsocket中處于time_out的個數
3、lsof
列出當前系統打開文件的工具。
每行顯示一個打開的文件,若不指定條件默認將顯示所有進程打開的所有文件。
? ?lsof輸出各列信息的意義如下:
COMMAND:進程的名稱 PID:進程標識符
USER:進程所有者
FD:文件描述符,應用程序通過文件描述符識別該文件。如cwd、txt等 TYPE:文件類型,如DIR、REG等
DEVICE:指定磁盤的名稱
SIZE:文件的大小
NODE:索引節點(文件在磁盤上的標識)
NAME:打開文件的確切名稱
4、dstat
多功能系統資源統計生成工具(?versatile tool for generating system resource statistics)。在獲取的信息上有點類似于top、free、iostat、vmstat等多個工具的合集,官方解釋為vmstat、iostat、ifstat等工具的多功能替代品
按照io負載率統計進程排序
[root@node7.dtedu.com ~]# dstat --top-io
----most-expensive----
?? ? i/o process ? ? ?
rgmanager ??261B??414k
sshd: root@?146B??184B
fenced ? ??? 64B??128B
fenced ? ??? 64B??128B
modclusterd?292B? ? 0?
clustat? ??? 15k? ? 0?
fenced ? ??? 64B??128B
fenced ? ??? 64B??128B
modclusterd?292B? ? 0?
modclusterd? 15k? ? 0?
fenced ? ??? 64B??128B
modclusterd?292B? ? 0 ^C
按照cpu負載率統計進程并排序
[root@node7.dtedu.com ~]# dstat --top-cpu
-most-expensive-
? cpu process? ?
corosync ? ??0.1? ? ? ? ? ? ???? ? ? ? ? ?
sshd: root@pt1.0
c:顯示CPU系統占用,用戶占用,空閑,等待,中斷,軟件中斷等信息。 -C:當有多個CPU時候,此參數可按需分別顯示cpu狀態,例:-C 0,1 是顯示cpu0和cpu1的信息。 -d:顯示磁盤讀寫數據大小。 -D hda,total:include hda and total。 -n:顯示網絡狀態。 -N eth1,total:有多塊網卡時,指定要顯示的網卡。 -l:顯示系統負載情況。 -m:顯示內存使用情況。 -g:顯示頁面使用情況。 -p:顯示進程狀態。 -s:顯示交換分區使用情況。 -S:類似D/N。 -r:I/O請求情況。 -y:系統狀態。 --ipc:顯示ipc消息隊列,信號等信息。 --socket:用來顯示tcp udp端口狀態。 -a:此為默認選項,等同于-cdngy。 -v:等同于 -pmgdsc -D total。 --output 文件:此選項也比較有用,可以把狀態信息以csv的格式重定向到指定的文件中,以便日后查看。例:dstat --output /root/dstat.csv & 此時讓程序默默的在后臺運行并把結果輸出到/root/dstat.csv文件中。
來自:?http://man.linuxde.net/dstat
六、進程管理優化
1、實現多內核的CPU的“專核專用”的效果。
將多個核心的cpu其中的幾個內核獨立出來,專門供一些特殊的進程使用,這樣就保證了進程的工作穩定性和高效率。要實現此目的,需要在啟動系統的時候隔離出需要的內核,然后在將其從io中斷中分離出來,最后是內核指定給進程使用。
A、隔離出指定內核,修改/etc/grub.conf文件,并添加一下內容:
isolcpu = cpu number1,cup number2,…….
B、關聯進程到內核,
C、將中斷信號只發送的其他非“專用”的內核上。
查看終端號同那個cpu關聯。
[root@node7.dtedu.com ~]# cat /proc/irq/0/smp_affinity
1
[root@mail ~]# cat /proc/irq/0/smp_affinity
ffffffff
[root@mail ~]# cat /proc/irq/1/smp_affinity
000000ff
[root@mail ~]# cat /proc/irq/5/smp_affinity
000000ff
[root@mail ~]# cat /proc/irq/7/smp_affinity
查看中斷號:
[root@node7.dtedu.com ~]# ls /proc/irq/
0???11??14??17??2???26??29??31??34??37??4???42??45??48??50??53??6??9
1???12??15??18??24??27??3???32??35??38??40??43??46??49??51??54??7? default_smp_affinity
10??13??16??19??25??28??30??33??36??39??41??44??47??5???52??55??8
[root@node7.dtedu.com ~]#?
比如:我有8個邏輯core,那么CPU#的序列為11111111 (從右到左依次為#0~#7的CPU)如果cat? /proc/irq/84/smp_affinity的值為:20(二進制為:00100000),則84這個IRQ的親和性為#5號CPU。
2、實現多CPU和物理內存綁定為一個“資源組”,并實現進程只能在指定資源組內訪問的方法
本文轉自 blackstome 51CTO博客,原文鏈接:http://blog.51cto.com/137783/1968814,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的linux架构师高级系统调优策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Netty的一些理解、实践与陷阱
- 下一篇: 萌新的Linux的学习之路(十) --i