• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    大型RAILS應用(網絡考試)性能測試與調優過程

    發布: 2008-7-14 10:02 | 作者: 網絡轉載 | 來源: 不詳 | 查看: 189次 | 進入軟件測試論壇討論

    領測軟件測試網

    一 背景介紹

      系統為上海一家IT公司rail on ruby快速開發出來的網絡考試系統。核心功能:登錄、考試?荚嚪譃閔tml的單/多選題,flash展現的操作題。在內部一次模擬考試中,系統曾經出現性能故障,導致無法正常做題。
      
    二 系統架構分析

     接到性能測試任務,第一感覺:要很注意每一個細節,包括用戶行為模擬、場景設計合理全面等。
     
     咨詢了解到系統架構為: ruby+rails+ apache2.x+mysql5。
     
     登錄系統:登錄web與登錄的DB分開
     考試系統:考試web與考試DB 集中部署在一臺機器上。答一道題目即插入數據庫


    三 用戶行為分析

    1 考試要求在 0~45分鐘內考試完畢
    2 多數考生一般先做選擇題,再做操作題;少部分反之。
    3 多數考生做完全部題目,少部分考生中途就提交結束答卷
    4 題目可以回退或者選擇任意一題目修改答案
    5 同一個考生在提交答卷后,不能再答題

    由于系統更加細致的數據沒有log分析,就簡單采用80-20原則隨機模擬。

    四 腳本開發小技巧
    1  隨機模擬腳本
    init.c 加入 srand(time(NULL));

    action.c 加入  rand() % 100;
     
    2 cookie處理

    服務器端檢查cookie信息。
    加入web_add_auto_header 確保后續每一個http請求都自動把cookie加入header

    3 并發處理
    由于一次性考試,故并發數沒有按考試人數縮放,但考試按照一定的隨機think time等待。
     
    五 系統調優

     主要的線索是environment.rb定義的config.log_level 生成product.log,
    以及rail bench。

    (一) 精簡登錄首頁
     
    1 登錄:削減登錄網頁,很輕量級,僅僅包含Login 窗口

    (二) flash下載模式變更
     原來做操作題目,該flash操作題才下載到客戶端。
    為了減輕并發下載flash的網絡流量壓力,變更為在登錄成功后,客戶端javascrīpt采用ajax技術(xmlhttpquest)隨機1-60秒內后臺主動下載flash試題到客戶端。改變網絡流量瞬間飆升的情況。

    (三) apache2.0 調整httpd.conf 關鍵參數以及加載mod_proxy 、mod_mem_cache

    1 apache httpd work mpm模式。
    增加 MaxClient。

    <IfModule worker.c>
    StartServers         2
    ServerLimit         2500
    MaxClients         2500
    MinSpareThreads     75
    MaxSpareThreads     255
    ThreadsPerChild     25
    MaxRequestsPerChild  0
    </IfModule>


    2 上apache 負載均衡模塊 mod_proxy

    ProxyRequests off

    <Proxy balancer://kaoshi>
    BalancerMember http://localhost:6000
    BalancerMember http://localhost:6001
    BalancerMember http://localhost:6002
    BalancerMember http://localhost:6003
    BalancerMember http://localhost:6004
    BalancerMember http://localhost:6005
    </Proxy>
    ProxyPass /images !
    ProxyPass /stylesheets !
    ProxyPass /javascrīpts !
    ProxyPass /expert_photos !
    ProxyPass /uploads !

    ProxyPass / balancer://kaoshi/
    ProxyPassReverse / balancer://kaoshi/
    ProxyPreserveHost on


    3  LoadModule mem_cache_module modules/mod_mem_cache.so加載cache模塊

           CacheEnable mem /
           MCacheMaxStreamingBuffer 65536
           MCacheRemovalAlgorithm LRU
           MCacheSize 3000000
           MCacheMaxObjectCount 256000
           CacheIgnoreHeaders None
           CacheIgnoreCacheControl On
           MCacheMinObjectSize 1
           MCacheMaxObjectSize 2560000
           CacheDefaultExpire 10

     

    (四)  rails 相關調整


    1 變更默認連接器為C-based MySQL library mysql-2.7。
    2  直接寫SQL不用activeRecord 接口。
    3  修改mogrel 服務參數

    mongrel_cluster.yml

    cwd: /home/www/kaoshi/current
    port: "6000"
    environment: production
    address: 0.0.0.0
    servers: 7


    4 rails負載均衡


    [app@b2bsearch114 controllers]$ pwd
    /home/app/download/match_export/app/controllers

    class ExamsController < ApplicationController
      IPS = %w(10.0.6.91 10.0.6.91 10.0.6.91 10.0.6.91 10.0.6.91 10.0.6.91)

      def host
        index = (session["no"] || 1) %  IPS.size
        render :text => IPS[index]
      end

    5 rails 部署Memcached緩存模塊


    (五)  數據庫結構以及SQL 調優

    調整MYSQL配置文件、以及增加部分字段索引之后,iowati%從20%下降到0.4%
    祥見
    http://nnix.blogbus.com/logs/14824821.html
    /bin/sh /usr/bin/mysqld_safe --user=mysql

     [root@aligame etc]# vi my.cnf

    [client]
    #password       = your_password
    port            = 3306
    socket          = /var/lib/mysql/mysql.sock

    # Here follows entries for some specific programs

    # The MySQL server
    [mysqld]
    port            = 3306
    socket          = /var/lib/mysql/mysql.sock
    skip-locking
    key_buffer = 64M
    max_allowed_packet = 1M
    table_cache = 512
    sort_buffer_size = 2M
    read_buffer_size = 2M
    read_rnd_buffer_size = 8M
    myisam_sort_buffer_size = 64M
    thread_cache_size = 8
    thread_concurrency = 8
    query_cache_size = 64M
    event_scheduler=1
    lower_case_table_names=1
    max_connections=200
    back_log=512
    default-character-set=utf8

    log_slow_queries
    log_long_format
    long_query_time=1
    server-id       = 1
    #innodb_data_file_path = ibdata1:1025M;ibdata2:256M:autoextend
    innodb_buffer_pool_size = 1024M
    innodb_max_dirty_pages_pct = 90
    innodb_additional_mem_pool_size = 16M
    #innodb_log_file_size = 256M
    innodb_log_buffer_size = 8M
    innodb_log_files_in_group = 2
    innodb_flush_log_at_trx_commit = 2
    innodb_lock_wait_timeout = 50
    innodb_file_io_threads = 4
    innodb_thread_concurrency = 8

    [mysqldump]
    quick
    max_allowed_packet = 16M

    [mysql]
    no-auto-rehash
    # Remove the next comment character if you are not familiar with SQL
    #safe-updates

    [isamchk]
    key_buffer = 256M
    sort_buffer_size = 256M
    read_buffer = 2M
    write_buffer = 2M

     

    這 log_slow_queries,log_long_format,long_query_time=1 慢的查詢語句將被打印

    在目錄下可見*slow.log文件記錄可能有性能問題的SQL


    七 小結
     
       本次rails程序從應用程序調優、APACHE配置與調優、MYSQL索引與SQL優化多個細節提升性能。
    調整從最顯著的一個瓶頸(apache Maxclient->Mysql SQL)開始的,一次僅調整一個。
      本次調優一個環節后,瓶頸從一個環節轉移到另外一個環節。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: Rails 考試 網絡 性能測試 應用 RAILS


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>