Version 33 (modified by jazz, 14 years ago) (diff) |
---|
- [參考] http://www.ufsdump.org/ - 這個網站有許多關於效能調校的細部說明
- [工具] 以下是 http://www.ufsdump.org/ 文件中提到的幾個工具
- system & disk I/O
- network
- [工具] Open Source Performance Test Tools 列舉了許多自由軟體相關的效能測試工具
Performance Tuning
System Performance Tuning : CPU
- 檢查 CPU 是否為 64 位元的方法 - 參考自 Ubuntu 論壇
~$ sudo lshw -C cpu | grep width width: 32 bits ---> 為 32 位元 ======= width: 64 bits ---> 為 64 位元
- 檢查 CPU 是否支援虛擬化 - 旗標(flags)分別是: Intel (vmx) 與AMD (svm) (KVM 安裝 (rock))
~$ cat /proc/cpuinfo | egrep 'vmx|svm' --color
System Performance Tuning : Memory
- 查詢記憶體時脈與單一條的大小
$ sudo dmidecode 搜尋 Memory Device 會看到類似的結果 Memory Device Array Handle: 0x1000 Error Information Handle: Not Provided Total Width: 64 bits Data Width: 64 bits Size: 2048 MB Form Factor: DIMM Set: None Locator: DIMM_4 Bank Locator: Not Specified Type: DDR2 Type Detail: Synchronous Speed: 800 MHz (1.2 ns) Manufacturer: 7F4F000000000000 Serial Number: 0007D1E4 Asset Tag: 540834 Part Number: TS256MLQ64V8U
- Share Memory - 有些程式需要用到比較多 Share Memory (共享記憶體), 如: Kerrighed (2008-03-20 (rock/rider))
echo "kernel.shmall = 796917578" >> /etc/sysctl.conf echo "kernel.shmmax = 796917578" >> /etc/sysctl.conf echo "kernel.shmmni = 4096" >> /etc/sysctl.conf
- Cache Memroy - [參考] 回收 Linux cached memory
- 設定 vm.drop_caches 觸發 kernel 回收用於 cache 的記憶體。 至於 1, 2, 3 的等級,可參考 LinuxInsight 的說明
- 1: free pagecache
- 2: free dentries and inodes
- 3: free pagecache, dentries and inodes
echo 1 > /proc/sys/vm/drop_caches
sysctl -w vm.drop_caches=1
- 設定 vm.vfs_cache_pressure 使 kernel 更勤於回收 cache。
sysctl -w vm.vfs_cache_pressure=n (n > 100)
- 設定 vm.drop_caches 觸發 kernel 回收用於 cache 的記憶體。 至於 1, 2, 3 的等級,可參考 LinuxInsight 的說明
- 如何加速桌面應用 - <參考> Tales from responsivenessland: why Linux feels slow, and how to fix that
sysctl -w vm.swappiness=1 sysctl -w vm.vfs_cache_pressure=50
System Performance Tuning : File System
- 如何調整每個使用者可以開啟的檔案個數
- [參考] Increasing the file descriptor limit
- [參考] GNU/Linux - How Many Open Files?
- 注意:修改 /etc/security/limits.conf 中間必須確定是 TAB ,如果有設定 vim 的 softwaretab 的話,得特別當心!!!
- /proc/sys/fs/file-max - 核心預設最多可以開啟的檔案個數
~$ cat /proc/sys/fs/file-max 743964
- 修改方法: 使用 sysctl 指令或編輯 /etc/sysctl.conf
sysctl -w fs.file-max=100000
- 修改方法: 使用 sysctl 指令或編輯 /etc/sysctl.conf
- /proc/sys/fs/file-nr - 目前已開啟檔案個數、可供開啟檔案個數、總開啟檔案上限
[root@srv-4 proc]# cat /proc/sys/fs/file-nr 3391 969 52427 | | | | | | | | maximum open file descriptors | total free allocated file descriptors total allocated file descriptors (the number of file descriptors allocated since boot)
- /etc/security/limits.conf - 每個程序(process)可以開啟檔案的個數(number limits of open files per process) - 像 HDFS 的 DataNode 就需要調整這種參數(2010-02-22)
-
/etc/security/limits.conf
old new 49 49 #ftp - chroot /ftp 50 50 #@student - maxlogins 4 51 51 52 * soft nofile 4096 53 * hard nofile 743964 54 52 55 # End of file
-
- /etc/pam.d/login - 告訴系統要用 /etc/security/limits.conf 來設定一些上限
# Sets up user limits according to /etc/security/limits.conf # (Replaces the use of /etc/limits in old login) session required pam_limits.so
- 指令: ulimit - 可以告訴你一些系統限制,並且設定想要的値
jazz@Wdebian:~$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 72704 max locked memory (kbytes, -l) 32 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 72704 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
- 假設 /proc/sys/fs/file-max 跟 /etc/security/limits.conf 都有設定上限為 743964,且 /etc/pam.d/login 也有打開,但是 ulimit -a 指令仍顯示 1024 (預設),可以修改 /etc/rc.local 或 /etc/profile 強制用 ulimit -n 743964 來提高開檔個數。
~$ ulimit -n 743964
- [備註] 如果 ulimit 超出可容許範圍,會顯示 Operation not permitted,此時請檢查相關設定値
~$ ulimit -n 7439640 -bash: ulimit: open files: cannot modify limit: Operation not permitted
I/O Performance Tuning : NFS
- NFS Tuning - /etc/fstab - 加大 NFS read/write size 可以提升檔案系統的 I/O 效率 (2008-03-20 (rock/rider))
192.168.0.111:/home /home nfs rw,bg,soft,intr,rsize=262144,wsize=262144 0 4 192.168.0.111:/opt /opt nfs ro,bg,soft,intr,rsize=262144,wsize=262144 0 4 192.168.0.111:/usr /usr nfs ro,bg,soft,intr,rsize=262144,wsize=262144 0 4
I/O Performance Tuning : IOWait
- 2010-03-31 : 高 IOWait 有什麼好的解決之道呢??
- How to identify what processes are generating IO Wait load?
Jun run "pidstat -d 5" and it will print the list of processes doing IO over the last 5 seconds.
- Re: Major problems: High Iowait. Change filesystem from etx4 to xfs/ext3/jfs?
vm.dirty_writeback_centisecs=100 vm.dirty_expire_centisecs=100"
- iowait problem - 顯示了使用 vmstat , iostat , hdparm 的技巧
Network Performance Tuning
- TCP Tuning - (2008-03-20 (LSI))
echo 262144 > /proc/sys/net/core/rmem_default echo 8388608 > /proc/sys/net/core/wmem_max echo 8388608 > /proc/sys/net/core/rmem_max echo "4096 87380 4194304" > /proc/sys/net/ipv4/tcp_rmem echo "4096 65536 4194304" > /proc/sys/net/ipv4/tcp_wmem
- TCP TIME_WAIT & Reuse - 適用網站伺服器 (2010-03-26)
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout sysctl net.ipv4.tcp_tw_reuse=1 sysctl net.ipv4.tcp_tw_recycle=1
- 如果沒辦法 ping 224.0.0.1 的話,代表 Broadcast ICMP 封包被濾掉了,因為預設 Linux kernel 2.6 是 disable 的。解法如下:(2009-09-07)
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
~# echo "net.ipv4.icmp_echo_ignore_broadcasts = 0" >> /etc/sysctl.conf ~# sysctl -p net.ipv4.ip_forward = 1 net.ipv4.icmp_echo_ignore_broadcasts = 0
- 如何在 Linux System 當中偵測網路線是否有接上? (2009-05-05)
$ cat /sys/class/net/eth0/carrier
Power Management
- 啟動 SATA ALPM 電源管理功能 - powertop 提供之建議
echo min_power > /sys/class/scsi_host/host0/link_power_management_policy
- 虛擬機器的 clocksource (2010-02-11)
echo acpi_pm > /sys/devices/system/clocksource/clocksource0/current_clocksource
- 直接修改系統參數讓 Linux 休眠 (2010-03-03 (rock))
# echo 4 > /proc/acpi/sleep /** 適用 Kernel 2.4 (swsusp)**/ # echo disk > /sys/power/state /** 適用 Kernel 2.4 & 2.6 (swsusp)**/
Security / Management Tip
- [緣起] 有時因為 Kernel 顯示 DEBUG 訊息,縱使下 reboot 或 shutdown, halt 都無效時,可以使用這個技巧。
- [備忘] 強迫重新開機 - 使用以下指令或按下 ALT + SysRq + b
echo 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-trigger
- [備忘] 強迫直接關機 - 使用以下指令或按下 ALT + SysRq + o
echo 1 > /proc/sys/kernel/sysrq echo o > /proc/sysrq-trigger
- [備忘] 強迫重新開機 - 使用以下指令或按下 ALT + SysRq + b
- 關於 /proc/sysrq-trigger (2009-11-17)
- Redhat 手冊的說明 - /proc/sysrq-trigger
- 其實除了 CTRL+ALT+DEL 外,Linux 還可以透過 System Request (Sys Rq) 按鍵 來做一些特殊除錯工作。這個 Sys Rq 鍵,通常跟 Print Screen 鍵做在一起。
- 要啟用這個功能,首先必須確認核心的 CONFIG_MAGIC_SYSRQ 參數是否有 enable。
- 維基百科除了說明 SYSRQ 可以做哪些事情外,還介紹了sysrqd這個軟體,讓管理者可以遠端執行 SYSRQ 的指令。PS.sysrqd 也有 debian 套件!!
- 關於 /proc/sys/kernel/sysrq (2009-11-17)
- [備忘] Linux 遇到 kernel panic 後可自動重新開機(Auto Reboot)
或者編輯 /etc/sysctl.conf 加入
$ sudo sysctl -w kernel.panic = 20
kernel.panic = 20