Jump to content
Sign in to follow this  
renatino

Ottimizzazione server

Recommended Posts

Salve a tutti,

utilizzo da 6 mesi un server dedicato con solo 1gb di ram ma ben spinto, almeno spero, con xcache.

Mod installate: MOD_SECURITY2, MOD_EVASIVE

 

Utilizzo:

  • Forum (vbulletin con ottimizzazione xcache)
  • Blog (Wordprerss con ottimizzazione xcache) con 1000 utenti connessi simultaneamente di media (picchi 1400)
  • PHPLIST per invio mailing a circa 140.000 mail ogni settimana (invio 300 mail ogni 3 minuti con crontab)

Server Leaseweb con pannello plesk 9.2.3 con queste specifiche:

Intel Core Duo T2450 2.0 GHz

1GB DDR2

1 x 250GB SATA2

Debian 4.0 etch

PHP 5.2.0-8+etch15

Zend Engine v2.2.0,

XCache v1.2.2

 

Esempio di server load con 700 utenti collegati in totale su blog e forum:

 

261120091128.jpg

 

my.cnf

#

# The MySQL database server configuration file.

#

# You can copy this to one of:

# - "/etc/mysql/my.cnf" to set global options,

# - "~/.my.cnf" to set user-specific options.

#

# One can use all long options that the program supports.

# Run program with --help to get a list of available options and with

# --print-defaults to see which it would actually understand and use.

#

# For explanations see

# MySQL :: MySQL 5.1 Reference Manual :: 5.1.4 Server System Variables

 

# This will be passed to all mysql clients

# It has been reported that passwords should be enclosed with ticks/quotes

# escpecially if they contain "#" chars...

# Remember to edit /etc/mysql/debian.cnf when changing the socket location.

[client]

port = 3306

socket = /var/run/mysqld/mysqld.sock

 

# Here is entries for some specific programs

# The following values assume you have at least 32M ram

 

# This was formally known as [safe_mysqld]. Both versions are currently parsed.

[mysqld_safe]

socket = /var/run/mysqld/mysqld.sock

nice = 0

 

[mysqld]

set-variable=local-infile=0

#

# * Basic Settings

#

user = mysql

pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

port = 3306

basedir = /usr

datadir = /var/lib/mysql

tmpdir = /tmp

language = /usr/share/mysql/english

skip-external-locking

#

# Instead of skip-networking the default is now to listen only on

# localhost which is more compatible and is not less secure.

# bind-address = 127.0.0.1

#

# * Fine Tuning

#

key_buffer = 64M

max_allowed_packet = 16M

thread_stack = 128K

thread_cache_size = 32

max_connections = 200

table_cache = 256

thread_concurrency = 4

#

# * Query Cache Configuration

#

query_cache_limit = 2M

query_cache_size = 2M

#

# * Logging and Replication

#

# Both location gets rotated by the cronjob.

# Be aware that this log type is a performance killer.

#log = /var/log/mysql/mysql.log

#

# Error logging goes to syslog. This is a Debian improvement :)

#

# Here you can see queries with especially long duration

#log_slow_queries = /var/log/mysql/mysql-slow.log

#long_query_time = 2

#log-queries-not-using-indexes

#

# The following can be used as easy to replay backup logs or for replication.

#server-id = 1

log_bin = /var/log/mysql/mysql-bin.log

# WARNING: Using expire_logs_days without bin_log crashes the server! See README.Debian!

expire_logs_days = 10

max_binlog_size = 100M

#binlog_do_db = include_database_name

#binlog_ignore_db = include_database_name

#

# * BerkeleyDB

#

# Using BerkeleyDB is now discouraged as its support will cease in 5.1.12.

skip-bdb

#

# * InnoDB

#

# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.

# Read the manual for more InnoDB related options. There are many!

# You might want to disable InnoDB to shrink the mysqld process by circa 100MB.

#skip-innodb

#

# * Security Features

#

# Read the manual, too, if you want chroot!

# chroot = /var/lib/mysql/

#

# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".

#

# ssl-ca=/etc/mysql/cacert.pem

# ssl-cert=/etc/mysql/server-cert.pem

# ssl-key=/etc/mysql/server-key.pem

 

 

 

[mysqldump]

quick

quote-names

max_allowed_packet = 16M

 

[mysql]

#no-auto-rehash # faster start of mysql but no tab completition

 

[isamchk]

key_buffer = 64M

 

#

# * NDB Cluster

#

# See /usr/share/doc/mysql-server-*/README.Debian for more information.

#

# The following configuration is read by the NDB Data Nodes (ndbd processes)

# not from the NDB Management Nodes (ndb_mgmd processes).

#

# [MYSQL_CLUSTER]

# ndb-connectstring=127.0.0.1

 

 

#

# * IMPORTANT: Additional settings that can override those from this file!

#

!includedir /etc/mysql/conf.d/

 

XCACHE.INI

 

# configuration for php Xcache module

 

[xcache-common]

;; install as zend extension (recommended), normally "$extension_dir/xcache.so"

zend_extension = /usr/lib/php5/20060613+lfs/xcache.so

 

[xcache.admin]

xcache.admin.enable_auth = On

# Configure this to use admin pages

; xcache.admin.user = "xxxxxxx"

; xcache.admin.pass = md5($your_password)

; xcache.admin.pass = "xxxxxxx"

 

[xcache]

; ini only settings, all the values here is default unless explained

 

; select low level shm/allocator scheme implemenation

xcache.shm_scheme = "mmap"

; to disable: xcache.size=0

; to enable : xcache.size=64M etc (any size > 0) and your system mmap allows

xcache.size = 140M

; set to cpu count (cat /proc/cpuinfo |grep -c processor)

xcache.count = 2

; just a hash hints, you can always store count(items) > slots

xcache.slots = 1K

; ttl of the cache item, 0=forever

xcache.ttl = 3600

; interval of gc scanning expired items, 0=no scan, other values is in seconds

xcache.gc_interval = 300

 

; same as aboves but for variable cache

xcache.var_size = 2M

xcache.var_count = 2

xcache.var_slots = 1K

; default ttl

xcache.var_ttl = 3600

xcache.var_maxttl = 7200

xcache.var_gc_interval = 300

 

xcache.test = Off

; N/A for /dev/zero

xcache.readonly_protection = Off

; for *nix, xcache.mmap_path is a file path, not directory.

; Use something like "/tmp/xcache" if you want to turn on ReadonlyProtection

; 2 group of php won't share the same /tmp/xcache

; for win32, xcache.mmap_path=anonymous map name, not file path

xcache.mmap_path = "/dev/zero"

 

 

; leave it blank(disabled) or "/tmp/phpcore/"

; make sure it's writable by php (without checking open_basedir)

xcache.coredump_directory = ""

 

; per request settings

xcache.cacher = On

xcache.stat = On

xcache.optimizer = On

 

[xcache.coverager]

; per request settings

; enable coverage data collecting for xcache.coveragedump_directory and xcache_coverager_start/stop/get/clean() functions (will hurt executing performance)

xcache.coverager = Off

 

; ini only settings

; make sure it's readable (care open_basedir) by coverage viewer script

; requires xcache.coverager=On

xcache.coveragedump_directory = ""

FCGID.cnf

# added by psa-mod-fcgid-configurator

<IfModule mod_fcgid.c>

IdleTimeout 3600

ProcessLifeTime 7200

MaxProcessCount 64

DefaultMaxClassProcessCount 8

IPCConnectTimeout 30

IPCCommTimeout 45

DefaultInitEnv RAILS_ENV production

</IfModule>

 

Posso ottimizzare ancora qualcosa nei settaggi mysql xcache o altro?

Share this post


Link to post
Share on other sites

Comincia col lanciare questo script: http://www.hostingtalk.it/forum/gestione-server-windows-linux-co/12302-script-php-per-lottimizzazione-di-mysql.html

 

Intanto ti consiglio a priori di aggiornare xcache alla 1.3.0 :approved:

 

Altra domanda: ti serve veramente plesk? Se hai pochi domini da gestire ti converrebbe gestire tutto a mano risparmiando sicuramente un po' di risorse e avendo più spazio di modifica ai vari software (nuove versioni, webserver più leggeri, ecc) :approved:

Share this post


Link to post
Share on other sites

Grazie di avermi risposto!

 

Plesk è chiesto da un utente del server, non molto pratico delle conf da terminale...quindi devo tenermelo controvoglia.

 

XCACHE a quanto leggo non esiste 1.3 comptibile con debian 4 etch, ma solo per lenny 5 che io non ho installato.

http://www.howtoforge.com/xcache-php5-apache2-debian-etch

 

Il tuo script mi riporta debian 5 ma è impossibile...... è un bug dello script o colpa di qusti due valori che uso per nascondere la versione del php e apache:

 

ServerTokens Prod

ServerSignature Off

 

Lo script mi riporta questo:

 

serverstatus.th.jpg

Share this post


Link to post
Share on other sites

ah si forse da apt-get non lo puoi installare, comunque non è incompatibile, basta compilarlo a mano, comunque se non sai bene come fare e come fixare eventuali problemi evita perchè tanto non è un aggiornamento così "rivoluzionario".

 

Per quanto riguarda MySQL intanto una domanda: da quanto tempo avevi riavviato il server MySQL quando hai lanciato lo script?

 

Comincia comunque sicuramente ad aumentare i valori di table_cache e query_cache_size in my.cnf come ti consiglia lo script, in pratica non hai abbastanza spazio riservato al caching di MySQL e questo sicuramente genera un aumento del carico sulla CPU, per gli altri valori aspetto che mi dici da quanto tempo hai riavviato MySQL perchè potrebbe non essere indicativo se l'hai appena riavviato:approved:

Share this post


Link to post
Share on other sites

Io da crontab riavvio mysql ogni 24 ore

Se guardi il terminale vedrai mysqld attivo da molto tempo e dopo 24 noto miglioramenti riavvinao mysql ;)

 

Xcache 1.3 ho letto che non è poi così diverso dalla mia versione...evito lavori potenzilamente dannosi ;)

 

My.cnf aggiornato

 

key_buffer = 64M

max_allowed_packet = 16M

thread_stack = 128K

thread_cache_size = 32

max_connections = 200

table_cache = 512

thread_concurrency = 4

#

# * Query Cache Configuration

#

query_cache_limit = 2M

query_cache_size = 8M

ora mi genera questo:

 

serverstatus1.th.jpg

Share this post


Link to post
Share on other sites

Non posso aggiornare il post e ti metto i valori attuali.....appena avviato mysql lo script fa un po fatica a verificare tutto correttamente ;)

 

key_buffer = 64M

max_allowed_packet = 16M

thread_stack = 128K

thread_cache_size = 32

max_connections = 200

table_cache = 512

thread_concurrency = 4

#

# * Query Cache Configuration

#

query_cache_limit = 2M

query_cache_size = 8M

 

 

serverstatus2.th.jpg

 

 

AGGIORNAMENTO :

 

✗ Query cache prune rate:(query_cache_size)

 

0.3343 You are getting a lot of query cache prunes. The query cache is too small. Try setting it to 16777216.

Share this post


Link to post
Share on other sites

Il tuo script mi riporta debian 5 ma è impossibile...... è un bug dello script o colpa di qusti due valori che uso per nascondere la versione del php e apache:

 

ServerTokens Prod

ServerSignature Off

 

mmmm mi sembra strano, misà proprio che hai debian 5, giusto per esser sicuri lancia "more /etc/debian_version" così vediamo subito:approved:

 

Per quanto riguarda MySQL il TIME+ che vedi in top si riferisce ai cicli di CPU usati, non al tempo effettivo :P Da quanto effettivamente sta andando puoi vederlo da phpmyadmin (scheda status)

 

ora mi genera questo:

 

serverstatus1.th.jpg

 

Aumenta ancora la table cache col valore indicato perchè se appena riavviato è già quasi piena tra poco lo sarà del tutto ;)

 

Ah... utilizzi tabelle InnoDB?

Per le altre ottimizzazioni dobbiamo comunque aspettare qualche ora dall'ultimo riavvio, posta di nuovo il risultato dello script nel tardo pomeriggio :sisi:

 

EDIT: Ecco, aumenta anche il valore appena andato in rosso come ti suggerisce :)

Share this post


Link to post
Share on other sites

AGGIORNAMENTO dopo pochi minuti:

 

Sempre con:

 

key_buffer = 64M

max_allowed_packet = 16M

thread_stack = 128K

thread_cache_size = 32

max_connections = 200

table_cache = 512

thread_concurrency = 4

#

# * Query Cache Configuration

#

query_cache_limit = 2M

query_cache_size = 8M

Query cache prune rate:

(query_cache_size) 0.3812 You are getting a lot of query cache prunes. The query cache is too small. Try setting it to 16777216.

 

Temporary table disk usage:

(tmp_table_size, max_heap_table_size) 0.9334 Try increasing your max_heap_table_size to 33554432. If a temporary table in memory exceeds the specified limits, it is pushed to disk. This can slow complex queries down.

 

CON MIO STUPORE:

 

more /etc/debian_version

5.0.3

 

InnoDB non saprei nemmeno gestirlo....non so come mai è attivo, da dove lo escludo dato che tutte le linee in my.cnf sono ommentate?

 

Puoi suggerimi dei valori in base a quanto ti ho appena allegato...thanks

Share this post


Link to post
Share on other sites

TI AGGIORNO SU UNA MODIFICA

 

 

key_buffer = 64M

max_allowed_packet = 16M

thread_stack = 128K

thread_cache_size = 32

max_connections = 200

table_cache = 640

thread_concurrency = 4

 

# * Query Cache Configuration

 

query_cache_limit = 2M

query_cache_size = 8M

Table cache usage:

(table_cache) 0.6984

VALORE ORA CON V VERDE ;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×