Trang 1 / 3 123 LastLast
Hiển thị kết quả từ 1 đến 10 / 22
  1. #1
    Tham gia
    20-11-2006
    Bài viết
    60
    Like
    4
    Thanked 0 Times in 0 Posts

    CPU bị quá tải do mysql

    Mình có 1 website tin tức đặt trên server riêng, cấu hình CPU:Intel Quad-Core Xeon X3430 (2.40 GHz), RAM 2GB. Khi có nhiều người online cùng lúc chỉ khoảng 300-400 người là RAM giảm chỉ còn trên dưới 1GB, CPU cũng hoạt động trên 100%, có khi lên 200% mà toàn do mysqld thôi. Lúc đó khách truy cập website thỉnh thoảng lại bị lỗi mysql could not connect nữa.
    Website của mình chạy cron lấy tin về lưu vào database liên tục, 1 phút chạy lấy tin 1-2 lần, nên mình nghĩ phải cấu hình lại config của mysql, sao cho cân bằng dc RAM và CPU để website được ổn định. Mà lại ko rành về mấy cái vụ này. Nên nhờ các pác tư vấn giúp.
    Xin cảm ơn các pác nhiều !
    Quote Quote

  2. #2
    Tham gia
    24-10-2003
    Location
    Hanoi
    Bài viết
    1,380
    Like
    0
    Thanked 6 Times in 6 Posts
    Bạn đã tối ưu hóa mySQL với my.cnf chưa? Server có cấu hình ổ cứng như thế nào?

  3. #3
    Tham gia
    20-11-2006
    Bài viết
    60
    Like
    4
    Thanked 0 Times in 0 Posts
    đây là my.cnf của mình, cũng ko có chỉnh gì nhiều, bạn xem giúp mình nhé
    còn ổ cứng của mình 250GB
    -------------
    [mysqld]
    max_connections = 100
    max_user_connections = 100
    key_buffer = 32M
    key_buffer_size = 32M
    innodb_buffer_pool_size = 32M
    innodb_lock_wait_timeout = 100
    myisam_sort_buffer_size = 16M
    join_buffer_size = 16M
    read_buffer_size = 32M
    sort_buffer_size = 16M
    table_cache = 4096
    thread_cache_size = 4
    interactive_timeout = 25
    wait_timeout = 120
    connect_timeout = 10
    max_allowed_packet = 64M
    max_connect_errors = 100
    query_cache_type = 1
    query_cache_limit = 4M
    query_cache_size = 32M
    tmp_table_size = 32M
    max_heap_table_size = 32M
    flush_time=3600
    ------------

  4. #4
    Tham gia
    24-10-2003
    Location
    Hanoi
    Bài viết
    1,380
    Like
    0
    Thanked 6 Times in 6 Posts
    Mọi người thường đưa my.cnf lên, nhưng theo tôi, nó ko giúp ích nhiều, khi không biết thực tế trên server có bao nhiêu db, tables, việc sử dụng thực tế đến đâu. Không thể copy 1 file my.cnf của người này mà dùng cho người khác được.

    Với 1 hệ thống request liên tục, nếu chỉ chạy 1 ổ cứng SATA, thì sẽ là quá yếu. Với server như thế, 1 vps tốt với raid10 hardware có thể xử lý tốt hơn.

    Trong trường hợp của bạn, nên tìm hiểu lại hệ thống của mình sử dụng thực tế database như thế nào rồi mới tinh chỉnh my.cnf. Và cân nhắc việc chuyển đổi sang VPS 2GB RAM (tất nhiên phải là VPS với vendor tốt, dùng raid10 hardware, ko oversell), hoặc lắp thêm ổ cứng, card raid.

  5. Thành viên Like bài viết này:


  6. #5
    Tham gia
    23-07-2009
    Bài viết
    190
    Like
    0
    Thanked 49 Times in 34 Posts
    CPU cũng hoạt động trên 100%, có khi lên 200% mà toàn do mysqld thôi.
    Server không thể nào chạy quá 100% tài nguyên được, cái bạn nhìn là process mysqld running chiếm > 100% CPU.

    Với CPU X3430 4 physical cores - không Hyper Threads thì tối đa 1 process chạy được 400% CPU ( 4 threads x100% ).

    Xem qua TOP sẽ thấy : %us % sy %wa % si %hi thì tổng các thông số đó cộng lại mới là 100% CPU usage của hệ thống.

    Trở lại vấn đề của bạn, thông thường với CPU X3430 2G RAM này thì thừa đủ chạy cho 1000 Online kể cả đối với code nặng ( WP, Joomla) tuy nhiên theo bạn nói thì bạn chạy Tool Auto GET CONTENT từng phút và Insert liên tục vào DB thì bạn cần điều chỉnh các thông số sau:

    1. Kiểm tra I/O Harddisk có đảm bảo lúc high load không ( nhìn thông số %wa , nếu duy trì < 10% thì bình thường, nếu > 10% thì sẽ gây nghẽn I/O khiến các tiến trình đang chạy tốn nhiều thời gian kết thúc --> gây tốn CPU hơn). Giải pháp giải quyết quá tải là thay ổ cứng thường = 1 ổ SSD 120G -> 160G hoặc 1 ổ Raptor 10K RPM 150G sẽ giải quyết được, chi phí là thấp nhất so với nâng cấp raid 10 cần 4 ổ 250G RE hay ES.

    2. Cân chỉnh lại các thông số của PHP cho phù hợp ( cài thêm XCACHE , MEMCACHED hoặc tương đương )

    3. Có thể lắp thêm 2G RAM nữa, và tiến hành điều chỉnh lại MySQL Config cho các thông số Key Cache, Buffer Cache , Query Cache trên RAM lớn hơn để tăng cường khả năng xử lý của MySQL Server, giảm thiểu đọc ghi trực tiếp trên HDD.

    VD:
    + max_connections = 250
    + query_cache_limit = 2M
    + query_cache_size = 150M
    + tmp_table_size = 200M
    + max_heap_table_size = 300M
    + key_buffer_size = 300M
    + tmpdir = /dev/shm ( đưa temp table lên hẳn MEM để thao tác FLUSH vào DB nhanh hơn )

    3. Tối ưu hóa code , cụ thể ở đây là công cụ lấy tin tự động, vì nó chạy liên tục nên tần suất INSERT vào DB là rất lớn ( INSERT song song, nếu chạy nhiều thread GET CONTENT cùng lúc).

    + Khi đã cấu hình MySQLD sử dụng Key, Buffer, tempdir trên MEM thì tiến hành kết hợp thay đổi cú pháp QUERY từ việc INSERT trực tiếp vào DB ( xuống disk) mà chuyển thành QUERY dạng DELAY INSERT lúc này dữ liệu sau ghi được bóc tách thành công sẽ tạm được CACHED trên MEMORY và dần dần được MySQL FLUSH vào table tương ứng, giải pháp này sẽ giải quyết đáng kể việc nghẽn cổ chai trên HDD hệ thống.

    5. Tunning vài thông số về Kernel (systcl.conf) nếu có chút kinh nghiệm cũng sẽ làm hệ thống luôn refresh khi phải thực thi các công việc nặng.


    Chúc vui.

  7. 3 thành viên Like bài viết này:


  8. #6
    Tham gia
    06-03-2007
    Bài viết
    495
    Like
    0
    Thanked 54 Times in 44 Posts
    Bạn nên post thêm thông tin về IO hiện tại
    # iostat 1 5
    Làm theo bác @BMC-Onoline là khá đầy đủ trên khía cạnh system. Ngoài ra bạn nên kiểm tra lại source code, profiler lại DB Query để có cái nhìn chính xác nhất, như việc sử dụng query, cấu trúc DB, Indexing ...
    Cho dù bạn có chỉnh cache_size, buffer_size chuẩn, đầy đủ, nhưng trong DB có cấu trúc không tốt, các câu truy vấn không dùng tới indexing khi đó các giá trị trên không còn tác dụng nữa.
    MANAGED DEDICATED SERVER - http://sundata.vn

  9. Thành viên Like bài viết này:


  10. #7
    Tham gia
    09-08-2009
    Location
    /dev/zero
    Bài viết
    1,407
    Like
    186
    Thanked 84 Times in 78 Posts
    1. Không thể mơ tưởng được chuyện CPU cấp cho mysqld = với của httpd được
    2. Cũng không cần nâng cấp RAM vì dùng có hết đâu mà nâng cấp
    3. Các thông số cấu hình trong php.ini và my.cnf chỉ là phụ, cái chính vẫn là code, vd đơn giản nhất hay gặp là: mysql_connect() vs. mysql_close(), theo lẽ thường thì mysql process tự động close, nhưng với 1 mysqld bận rộn thì nên close trước cả sql_timeout. Nên bật log cho các tiến trình sql chậm, để chẩn đoán chính xác hơn. Công cụ mysqltuner.pl/mysqltuner.pl cũng hữu ích.

  11. #8
    Tham gia
    17-08-2011
    Bài viết
    51
    Like
    11
    Thanked 4 Times in 4 Posts
    Các anh cho em hỏi là mình vào đâu để mở được file my cnf?
    Có phải là dùng lệnh ssh truy vấn vào server để lấy ra?

  12. #9
    Tham gia
    07-03-2010
    Bài viết
    121
    Like
    14
    Thanked 30 Times in 7 Posts
    có thể do truy vấn vào sql quá lớn.

  13. #10
    Tham gia
    31-05-2012
    Bài viết
    35
    Like
    2
    Thanked 4 Times in 4 Posts
    Query cache size quá thấp, các thông số còn lại quá sức (quá quá mức) so với cấu hình máy chủ. Vui lòng đọc kỹ lại tài liệu về tunrning mycnf trước khi thao tác.

    Với cấu hình máy chủ của bạn, theo bạn BMC thì có thể trên trên 1000 Connect cũng không sao - mình đồng ý. Vấn đề của bạn ở đây chính là tunring mycnf quá sai lệch so với cấu hình máy chủ dẫn đến mysql lạm dụng ram và cpu. Hãy tìm và đọc lại tài liệu rồi turning lại, mình đảm bảo sẽ giảm ngay cho bạn 50%CPU hoặc hơn.

    Mình nói sơ qua như vậy.

Trang 1 / 3 123 LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •