Chào các bác, tình hình là e mới tập tành làm site auto, có mua con vps 10$ trên linode, em dùng combo nginx + mariadb + php. Tối nay tầm 9h thì site e đột nhiên không vô được(lỗi 504), ssh + các thao tác kèm theo sao khi ssh thi cực kì chậm. Khi kết nối vô database và dùng lệnh *full processlist* thì thấy có tầm 50 query đang chạy, cũng chỉ là câu simple query(Select * from table)(đã được đánh index). Khi các query giảm xuống tầm 10,20 thì site lại chạy bình thường. ( có bác nào có kinh nghiệm về vụ này hay về optimize nginx/mariadb thì chia sẻ cho em với ạ.
1. Dù là SIMPLE QUERY nhưng không limit thì cũng dễ die. 2. Cái nhà dù to đến mấy mà cái cổng vào chỉ lọt 2 người cùng lúc thì khi 10 người cùng vào sẽ có 8 người phải đợi ==> xem lại limit connection và query của database 3. Bật log lại các slow queries để fix 4. Bật log slow php để fix Kiểm tra số connection tới VPS, kiểm tra realtime trên Analytics........... Tóm lại là ko thể liệt kê hết được..... để fix cái này cần kinh nghiệm và thời gian.
Có dùng script gì để quản lý không bác. Nếu không thì show processlist xem hàng đợi có query nào có time lâu không, nếu lâu thì khả năng là limit connect rồi. Vào /etc check my.conf xem sao
Dạ thanks bác, 1. Cái này thì e có limit cho query rồi bác 2.Em check max connection thì là 151. E có dùng longview của thằng linode, thì thấy max connection hôm qua 57, nghĩa là hôm qua server bị đứng do 57 connection này tới cùng 1 lúc. Số 3 và số 4 e làm rồi, để xem tối nay còn bị nữa hay không Bác nhắc e mới nhớ (( thằng Analytics check được realtime, để tối nay e coi thử.
E có dùng longivew của thằng linode để xem mấy thông số thông kê như ram, cpu ..... hôm qua lúc có 57 connection vào cùng 1 lúc thì gần như server đứng luôn bác ạ. e mới thêm đống này vô my.cnf để xem có hiệu quả ko Code: innodb_buffer_pool_size=1024M innodb_flush_log_at_trx_commit = 0 innodb_flush_method = O_DIRECT innodb_log_file_size = 512M innodb_log_files_in_group = 2 innodb_log_buffer_size=32M innodb_thread_concurrency=8 innodb_sort_buffer_size = 32M query_cache_type = 1 query_cache_limit = 64M query_cache_min_res_unit = 2048 query_cache_size = 512M sort_buffer_size = 4M thread_cache_size = 32 max_connections = 1024 slow-query-log = 1 slow-query-log-file = /var/lib/mysql/mysql-slow.log long_query_time = 1 key_buffer_size = 64M innodb_file_per_table skip-name-resolve
dạ vâng ạ, e cũng đang search khắp nơi trên mạng về optimize nginx, database, rồi apply thử xem có kết quả không
dùng mã nguồn wp hay tự code. đã cache chưa bro. Database max rows là bao nhiêu. 151 connect là ít mà.
e tự code, dùng laravel bác ạ, e cũng đang nghiên cứu vụ cache này, tính sử dụng cache của nginx. 151 là e dùng "SHOW VARIABLES LIKE "max_connections";" để xem thôi bác, hôm qua lúc cao điểm chỉ có 57 connection thôi. database e có tầm 500k rows thôi.
Với laravel dùng debugbar để show các query ở 1 page nào đó xem nó đúng với ý đồ của mình không, có query nào không nằm trong danh sách công việc phải xử lý từ đó mới tìm cách fix
e check rồi bác ạ, query ko có vấn đề gì cả, cứ tầm 8->11 h tối, e dùng show full processlist thì thấy có hơn 52 connection cùng 1 lúc tới, nhưng lên analytic check thì ko thấy có user nào cả
e nghĩ là do badbot đấy bác ạ, sau khi dùng cloudflare, bật mode under attach lên thì bây giờ hết bị rồi