ขอคำแนะนำการจูน Server หน่อยครับ

ผมไม่ได้จบคอมมานะครับ ไม่ค่อยมีความรู้เท่าด้านเซิฟเวอร์
ผมใช้ 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

เท่าที่พิมพ์มา ไอ้ที่ควรทำก้ทำไปหมดแล้ว
ที่เหลือต้องลองดู slow log ละครับ

ถ้าเป็นตามที่ @icez ว่า ก็แปลว่า vps นั้นตันละครับ

ขอบคุณครับ
เพิ่งมาดูปรากฏว่าไม่ได้เปิด slow queries log เอาไว้ เดี๋ยวขอไปเก็บข้อมูลก่อนครับ

RAM 1GB, CPU 1 core รองรับคนเข้า 4k-5k ต่อวันได้ ก็สวดยอดแล้วครับ :grin: