• JMeter 3.0 新版速覽

    Jmeter普遍廣泛的運用在效能測試, 這次Jmeter 3.0有重大的改版也帶來許多新功能

    其中筆者覺得最大的改進就是圖形化效能報告, 這篇文章主要介紹 Jmeter 主要重大的新版功能

    APDEX (Application Performance Index)

    APDEX? 是什麼? 參考 Wiki https://en.wikipedia.org/wiki/Apdex

    錯誤回傳

    平均反應時間

    平均延遲時間

    Threads數量

    搜尋

    有關鍵字找不到嗎? 透過這個就可以針對許多Jmeter設定或是結果搜尋

    text / regexp in Request/Responses/Headers/Cookies/…

    JSON的處理

    可以針對JSON回覆判斷

    測試

    右鍵 > Validate 就可以測試該 group (1 threat, 1 loop)的方式執行

     

     

    Tags:

  • 檢視網站效能與建議報告自動化工具

    這篇文章主要說明有沒有一種自動化的網站效能健診工具,

    可以評估網站網頁處理的效能瓶頸並且自動的根據掃描的結果給出改善的建議。

    筆者介紹幾種本地端的工具與雲端工具。

    Fidder

    推薦原因:

    • 不需要 Internet 可於特定電腦環境使用。
    • 可以將所有的瀏覽紀錄儲存工事後分析

    限制:只適用於 Windows. 雖然目前有 Mac Alpha 版本

    http://www.telerik.com/fiddler

    YSLOW

    推薦原因:

    • FireFox Addon 的小工具,可離線使用
    • 主動提供許多校能改善的建議。

    https://addons.mozilla.org/en-us/firefox/addon/yslow/

    Web Page Test

    推薦原因:提供完整的分析報告

    http://www.webpagetest.org/

    PingDom

    推薦原因:提供完整的分析報告

    http://tools.pingdom.com/fpt/

    https://developers.google.com/speed/pagespeed/insights/

  • Apache, MySQL, Linux 管理與維運常用指令

    這篇文章主要列出管理與維運 Apache or MySQL 的常用指令。

     

    常用的 Log Query

    為什麼要 Query 這些 Log 呢?

    因為上線前後我們會檢查是否有一些異常狀況,這時候就可以查詢相關的 Log

    PHP, Apache, 可以查詢與建議的 Log 舉例

     

    • tail -f /var/log/d/access_log
    • tail -f /var/log/httpd/error_log
      tail -f /var/log/messages
      tail -f /var/log/httpd/ssl_error_log
      tail -f /var/www/html/dp/application/logs/log-2013-09-03.php
      find / -name log-2013-08-06.php
      /var/www/html/dp.xx/application/logs/
    • tail -f /var/log/httpd/access_log

     

    Apache/Linux 系統紀錄檔說明

    /etc/httpd/conf/httpd.conf : Apache configuration file
    /var/log/secure:記錄登入系統存取資料的檔案,例如 pop3, ssh, telnet, ftp 等都會記錄在此檔案中;
    /var/log/wtmp:記錄登入者的訊息資料,由於本檔案已經被編碼過,所以必須使用 last 這個指令來取出檔案的內容;
    /var/log/messages:這個檔案相當的重要,幾乎系統發生的錯誤訊息(或者是重要的資訊)都會記錄在這個檔案中;
    /var/log/boot.log:記錄開機或者是一些服務啟動的時候,所顯示的啟動或關閉訊息;
    /var/log/maillog 或 /var/log/mail/*:紀錄郵件存取或往來( sendmail 與 pop3 )的使用者記錄;
    /var/log/cron:這個是用來記錄 crontab 這個例行性服務的內容的!
    /var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log: 分別是幾個不同的網路服務的記錄檔

     

    產生1M檔案十次

    什麼情境會使用這個呢?

    當要模擬磁碟存取或是磁碟空間實的效能測試,我們就可以用這個指令,大量產生需要的測試檔案。

    • dd if=/dev/urandom of=hihi.txt bs=1M count=10

    Apache狀態相關指令

    /etc/init.d/httpd start
    /etc/init.d/httpd stop
    /etc/init.d/httpd restart
    /etc/init.d/httpd status

    MySQL 相關指令

    service mysql restart

    檢查 HTTP service status

    ps auxww|grep httpd|wc -l 214

     

    檢查 Virtual Memory usage

    vmstat

    參考資料

    http://www.maketecheasier.com/linux-running-too-slow-heres-how-to-find-the-cause/2011/09/29

    http://www.tecmint.com/command-line-tools-to-monitor-linux-performance/

    http://www.linuxjournal.com/article/9001?page=0,0

    列出log 中有 Error 的關鍵字

    cat /var/www/html/dp/application/logs/log-2013-08-23.php | grep Error

     

    修改 Apache Configuration

    主要透過這些設定值的修改,讓 User experiences 更好。

    編輯 Apcahe 設定檔案  /etc/httpd/conf/httpd.conf

    設定 Apache 連線狀況

    KeepAlive On
    KeepAliveTimeout 60
    MaxKeepAliveRequests 0
    <IfModule prefork.c>
    StartServers 8
    MinSpareServers 5
    MaxSpareServers 20
    ServerLimit 10240
    MaxClients 10240
    MaxRequestsPerChild 10240
    </IfModule>

    設定網頁的壓縮

    透過壓縮的處理,讓檔案在網路傳輸時間減少。

    DeflateCompressionLevel 9
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE text/x-javascript
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript

    設定網頁的快取

    讓下一次網站讀取時,透過瀏覽器的快取機制,減少存取的需求。
    <IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/x-icon “access plus 1 week”
    ExpiresByType image/gif “access plus 1 week”
    ExpiresByType image/jpg “access plus 1 week”
    ExpiresByType image/jpeg “access plus 1 week”
    ExpiresByType image/png “access plus 1 week”
    ExpiresByType text/javascript “access plus 3 days”
    ExpiresByType text/js “access plus 3 days”
    ExpiresByType application/javascript “access plus 3 days”
    ExpiresByType application/x-javascript “access plus 3 days”
    ExpiresByType text/css “access plus 3 days”
    ExpiresByType text/x-json “access plus 3 days”
    </IfModule>

     

    Apache Log

    透過修改 Apache Log 的設定,可以讓我們知道每一個連線的執行時間。

    增加 %D 到Apache Configure to 觀察執行時間
    vim /etc/httpd/conf/httpd.conf
    %h %D %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\” combined

    /etc/init.d/httpd restart

     

    Linux 網路設定

    增加或修改net.ipv4.tcp_tw值:
    vim /etc/sysctl.conf
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 5000
    修改該 TCP keepAlive Timoout value
    echo 2400 > /proc/sys/net/ipv4/tcp_keepalive_time

    修改 TCP Timeout Value
    more /proc/sys/net/ipv4/tcp_fin_timeout
    echo “15” > /proc/sys/net/ipv4/tcp_fin_timeout
    /etc/rc.d/init.d/network restart
    使內核參數生效:
    sysctl -p
    /sbin/sysctl -p
    /etc/rc.d/init.d/network restart

     

    檢查 Linux相關系統狀態

     

    檢查 TCP connection 狀態
    netstat -nat|awk ‘{print awk $NF}’|sort|uniq -c|sort -n
    netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
    netstat -nato

    檢查跟 106/107 IP source connection 連線狀態
    netstat -n|grep “10.42.226.106:80” |awk -F ‘[:| ]+’ ‘{print $8,$10}’|sort | uniq -c|more
    netstat -n|grep “10.42.226.107:80” |awk -F ‘[:| ]+’ ‘{print $8,$10}’|sort | uniq -c|more

     

    檢查process狀態

    pstree

    檢查 io狀態

    iostat

     

    檢查啟動memcached service狀態

    service memcached status
    service memcached start

     

    修改 php.ini

    vim /etc/php.ini
    realpath_cache_size = 102400k
    realpath_cache_ttl = 1200

     

    檢查nfs state

    nfsstat

    檢查connection total time

    tail -f /var/www/html/dp/application/logs/log-2013-09-11.php | grep Total

     

    修改 memecroy chace

    vim /etc/sysconfig/memcached
    CACHESIZE=1024
    /etc/init.d/memcached restart
    ps aux | grep memca

     

    修改檔案開啟的上限數

    ulimit -n 1024000
    ulimit -u 6000
    prctl -n process.max-file-descriptor -t basic -v 1024000 -r -i process $$

     

    修改 mySQL settings

    MySQL可以透過一些設定值作效能的優化,以下是筆者會檢查的設定值

    vim /etc/my.cnf

    • max_connections = 6000
      thread_cache_size = 5500
      table_open_cache = 5000
      open-files-limit = 5000
      sort_buffer_size= from 8M to 2M
      join_buffer_size = from 32M to 2M

    設定完之後要重新啟動MySQL服務

    service mysql restart

     

    MySQL設定建議

    筆者推薦這個網站服務。
    https://tools.percona.com/wizard

     

    Crontab for Apache restart

    每五分種檢查 Apache service status,如果偵測到 httpd 服務沒有被啟動的話,就重新啟動。

    將ApacheRestart.sh設定為每五分鐘執行一次

    crontab -e
    */5 * * * * /etc/ApacheRestart.sh >/dev/null 2>&1

     

    ApacheRestart.sh 程式內容

    vim /etc/ApacheRestart.sh

    RESTART=”/etc/init.d/httpd restart”
    PGREP=”/usr/bin/pgrep”
    HTTPD=”httpd”
    $PGREP ${HTTPD}
    if [ $? -ne 0 ]
    then
    $RESTART
    fi

    chmod +x ApacheRestart.sh