ผมไม่ได้จบคอมมานะครับ ไม่ค่อยมีความรู้เท่าด้านเซิฟเวอร์
ผมใช้ centos บน vps แรม 1GB + CPU 1 core + SSD
ใช้ apache เป็น webserver + nginx เป็น reverse proxy ครับ
บนเซิฟเวอร์มีเว็บอยู่เว็บเดียวเท่านั้น ใช้ opencart
uip ประมาณ 2000 pageview ประมาณ 4000-5000 ต่อวันครับ
เคย peak สูงสุดประมาณ 5000 uip 10000 pageview
ก่อนหน้านี้เคยปรับแต่ง สร้าง index ให้ฐานข้อมูลแล้ว กับ optimize code ตามคำแนะนำเว็บบอร์ดเมืองนอก ทำให้ cpu ลดลงมาก
และหลังจากนั้นเคยจ้างพี่คนนึงในบอร์ดนี้ช่วยเซ็ต mysql ให้ครับ ก็ถือว่าดีขึ้นมาก แต่ดูจากกราฟแล้วใช้ cpu กับ Ram ยังไม่ถึงครึ่งเลยด้วยซ้ำ
แต่เวลาคนเข้าเยอะๆ จะเกิดอาการอืดๆ ต้องรอสักพักถึงจะโหลดหน้าเสร็จ บางครั้งต้องกด refresh 2-3 ครั้งถึงจะโหลดข้อมูลได้ครับ
mysql config กับ nginx และกราฟดังนี้ครับ ไม่ทราบว่าผมควรแก้อะไรเพิ่มเติมบ้างครับ
หรือควรจะเพิ่ม RAM กับ CPU แล้วค่อยมาเซ็ตค่าเพิ่มดีกว่าครับ
my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
max_connections=300
max_user_connections=150
wait_timeout=90
max_allowed_packet=16M
interactive_timeout=60
long_query_time=5
key_buffer=128M
query_cache_size=32M
thread_cache_size=256
join_buffer_size=1M
read_buffer_size=1M
sort_buffer_size=2M
skip-name-resolve
tmp_table_size=32M
table_cache=1500
tmp_table_size=32MB
read_rnd_buffer_size=1M
#log-queries-not-using-indexes
#log-slow-queries=/var/log/mysql/log-slow-queries.log
nginx.conf
Server globals
user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
Worker config
worker_rlimit_nofile 30000;
events {
multi_accept on;
worker_connections 2048;
use epoll;
}
http {
# Main settings
sendfile on;
tcp_nopush on;
tcp_nodelay on;
client_header_timeout 180;
client_body_timeout 180;
client_header_buffer_size 4k;
client_body_buffer_size 256k;
client_max_body_size 100m;
large_client_header_buffers 4 16k;
send_timeout 180;
keepalive_timeout 60;
reset_timedout_connection off;
server_tokens off;
server_name_in_redirect off;
server_names_hash_max_size 512;
server_names_hash_bucket_size 512;
# Log format
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format bytes '$body_bytes_sent';
#access_log /var/log/nginx/access.log main;
access_log /dev/null;
# Mime settings
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Compression
gzip on;
gzip_comp_level 9;
gzip_min_length 512;
gzip_buffers 8 64k;
gzip_types text/plain text/css text/javascript
application/x-javascript;
gzip_proxied any;
# Proxy settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Set-Cookie;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 120;
proxy_buffers 32 8k;
proxy_buffer_size 5120;
CPU
MYSQL
MEMORY
NGINX