Skocz do zawartości
andycole

ogolnie o optymalizacji serwera

Polecane posty

Witam,

 

Moj serwis jest serwisem o tematyce okresowej, czyli jak nie ma ludzi to nie ma a jak sa, to jest ich ponad 1300 online przez kilkanascie minut w tygodniu ;)

Ostatnio zoptymalizowalem swoje skrypty pod katem MySQL, dodalem indeksy, 'ponaprawialem' zapytania znajdujace sie w dzienniku zapytan, ktore nie uzywaja indeksow. Dodalem cachowanie calych stron html do plikow.

 

Przy pierwszym, duzym obciazeniu mialem ustawione max user connections = 22, wiec skonczylo sie tym ze brakowalo slotow mysql.

Na drugi dzien zwiekszylem wiec max user connections = 80 majac nadzieje, ze ta ilosc slotow w bazie wystarczy, a jednoczesniej sprawi, ze nie wpuszcze na jeden raz tyle typa, ze serwer padnie.

 

No i mam mieszane odczucia, bo poniewaz :P

- max_used_connections = 52, wiec ilosc slotow wystarczyla i nikt nie widzialem komunikatu, ze nie mozna polaczyc sie z baza danych

- proces mysqld w "top" tez nie zjadal az tak strasznej ilosci pamieci i cpu

 

a jednak serwer zamulil... dziwi mnie to wszystko, bo ilosc online byla porownywalna do tej sprzed optymalizacji :P

 

Ponizej wklejam logi i configi... Moze jakas madra glowa pomoze mi je przeanalizowac i wyciagnac jakies sensowne wnioski :(

 

log z top, z czasu najwiekszego obciazenia:

 

top - 22:48:09 up  2:23,  2 users,  load average: 17.20, 24.17, 13.5439;49m
Tasks:39;49m 265 39;49mtotal,39;49m   3 39;49mrunning,39;49m 262 39;49msleeping,39;49m   0 39;49mstopped,39;49m   0 39;49mzombie39;49m
Cpu(s):39;49m 49.5%39;49mus,39;49m 23.3%39;49msy,39;49m  0.0%39;49mni,39;49m 24.9%39;49mid,39;49m  0.0%39;49mwa,39;49m  0.0%39;49mhi,39;49m  1.3%39;49msi,39;49m  1.0%39;49mst39;49m
Mem: 39;49m  1026196k 39;49mtotal,39;49m   942484k 39;49mused,39;49m    83712k 39;49mfree,39;49m    24192k 39;49mbuffers39;49m
Swap:39;49m   262136k 39;49mtotal,39;49m        0k 39;49mused,39;49m   262136k 39;49mfree,39;49m   398664k 39;49mcached39;49m[6;1H
 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            39;49m
6113 apache    15   0 21220  10m 3396 S  7.7  1.0   0:02.23 httpd              39;49m
1211 mysql     15   0  633m  55m 4916 S  2.0  5.6   4:39.00 mysqld             39;49m
6201 apache    16   0 21164  10m 3380 S  2.0  1.0   0:01.24 httpd              39;49m
6361 apache    16   0 21180  10m 3364 S  2.0  1.0   0:00.24 httpd              39;49m
6032 apache    15   0 21152  10m 3372 S  1.7  1.0   0:01.65 httpd              39;49m
6051 apache    16   0 21232  10m 3396 S  1.7  1.0   0:02.28 httpd              39;49m
6127 apache    15   0 21272  10m 3388 S  1.7  1.0   0:02.15 httpd              39;49m
6142 apache    15   0 21180  10m 3404 S  1.7  1.0   0:01.41 httpd              39;49m
6224 apache    16   0 21252  10m 3404 S  1.7  1.0   0:02.14 httpd              39;49m
6227 apache    15   0 21188  10m 3388 S  1.7  1.0   0:01.38 httpd              39;49m
6229 apache    15   0 21180  10m 3372 S  1.7  1.0   0:01.21 httpd              39;49m
5938 apache    16   0 21224  10m 3396 S  1.3  1.0   0:02.51 httpd              39;49m
5950 apache    15   0 21240  10m 3376 S  1.3  1.0   0:02.67 httpd              39;49m
6083 apache    15   0 21144  10m 3368 S  1.3  1.0   0:02.12 httpd              39;49m
6089 apache    15   0 21252  10m 3396 S  1.3  1.0   0:02.04 httpd              39;49m
6137 apache    16   0 21284  10m 3396 S  1.3  1.0   0:02.08 httpd              39;49m
6206 apache    16   0 21140  10m 3352 S  1.3  1.0   0:01.31 httpd              39;49m

 

vmstat

 

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
1  0      0 141100  29412 403204    0    0    36   196  827  444 17  9 66  4
7  0      0 133288  29428 403572    0    0     0   270 1818  618 29 19 46  1
16  0      0 106136  29444 403908    0    0     0   326 1712  570 57 30  7  0
0  0      0 121688  29468 404324    0    0     0   270 1820  616 38 22 36  1
5  0      0 103064  29488 404708    0    0     0   255 1895  681 39 23 35  0
11  0      0  85392  29524 405116    0    0     0   367 1988  625 46 25 25  0
34  0      0  74784  29548 405696    0    0     0   374 2167  499 61 34  0  0
34  0      0  73684  29560 406200    0    0     0   302 1882  506 55 35  0  0
16  0      0  69360  29584 406800    0    0     0   314 2035  512 56 36  2  0
49  0      0  41792  29600 407248    0    0     0   366 2292  468 59 35  0  0
54  0      0  18928  29628 407804    0    0     0   310 2277  509 61 34  1  0
69  0      0   7440  29644 408308    0    0     0   306 2138  468 57 37  0  0
72  0      0   9896  25084 406152    0    0     0   295 2004  467 57 36  0  0
73  1      0  26536  24404 402732    0    0     1   371 2161  463 65 32  0  0
95  0      0  21972  24424 403176    0    0     0   306 2042  436 56 37  0  0
48  0      0  21716  24468 403644    0    0     1   393 2107  507 63 34  0  0
56  0      0  35048  24484 404176    0    0     2   374 2134  489 57 40  0  0
14  0      0  36464  24516 404644    0    0     0   323 2141  509 59 39  0  0
97  0      0   8788  24008 400028    0    0     0   318 2087  482 58 33  0  0

 

my.cnf:

 

[mysqld]
max_user_connections=80

key_buffer = 256M
sort_buffer = 16M
join_buffer_size = 16M
read_buffer_size = 8M
read_rnd_buffer_size = 12M
max_allowed_packet = 128M

### Global variables ###
table_cache = 16384
thread_stack = 512K
thread_cache_size = 384
wait_timeout = 80
myisam_sort_buffer_size = 64M
tmp_table_size = 256M
binlog_cache_size = 65536
max_heap_table_size = 256M
tmp_table_size = 256M
thread_concurrency = 8

query_cache_limit = 3M
query_cache_size = 256M
query_cache_type = 1

long_query_time = 1
log_error = error.dat
log-slow-queries = slow.dat
log-queries-not-using-indexes
#skip-innodb

 

Rodzaje zapytan:

set option  	80 k  	13,24 k  	24,46%
select  	49 k  	8 141,53  	15,03%
change db  	72 k  	12,04 k  	22,24%
delete  	3 890  	646,18  	1,19%
insert  	16 k  	2 710,63  	5,01%
update  	13 k  	2 199,83  	4,06%

 

Niektore pozycje SHOW STATUS mysql:

Handler_read_rnd  	155 k
Handler_read_rnd_next  	41 M
Slow_launch_threads  	10
Created_tmp_disk_tables  	60
Table_locks_waited  	44
Opened_tables  	224

 

I jeszcze pytanie na koniec, jak sprawdzic jaki mam procesor? bo ramu wiem, ze jest 1gb :)

 

Pozdrawiam

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W zasadzie wiekszosc logow z tych skryptow jest poprawna.

Jak mozna zmniejszyc obciazenie procesora?

Moze wywalic jakies moduly apache? ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W zasadzie wiekszosc logow z tych skryptow jest poprawna.

Jak mozna zmniejszyc obciazenie procesora?

Moze wywalic jakies moduly apache? :)

 

A może po prostu Twój sprzęt osiągnął kres swych możliwości. To się jednak czasem zdarza ;).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Proponuje wykonanie trzech podstawowych rzeczy:

 

1. najważniejsza - zmiana Apache'a na coś szybszego np. lighttpd lub nginx z PHP-FPM

 

2. Zainstalowanie akceleratora PHP np. Xcache

 

3. info dot. MySQL jest niewystarczające - nie mówi nic o wykorzystaniu buforów. Ściągnij mysqlreport i wrzuć tutaj wynik jego działania

 

PS. informacje dotyczące procesora odczytasz uruchamiając:

cat /proc/cpuinfo

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam dla ciebie bardzo istotnego hinta. Nie zawsze duże wartości buforów wpływają pozytywnie na wydajność MySQL. Mogę zerknąć na tą bazę i ci to zoptymalizować.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

1. najważniejsza - zmiana Apache'a na coś szybszego np. lighttpd lub nginx z PHP-FPM

2. Zainstalowanie akceleratora PHP np. Xcache

3. info dot. MySQL jest niewystarczające - nie mówi nic o wykorzystaniu buforów. Ściągnij mysqlreport i wrzuć tutaj wynik jego działania

 

1. Hmn, nigdy tego nie robilem i troche boje sie takiej ingerencji w serwer, ale do odwaznych swiat nalezy ;) poszukam jakiegos manuala i sprobuje :)

2. jw.

3. ponizej :)

 

mysqlreport

MySQL 5.0.67-log         uptime 0 20:46:41      Thu Nov 26 17:05:21 2009

__ Key _________________________________________________________________
Buffer used    42.15M of 256.00M  %Used:  16.46
 Current      34.03M            %Usage:  13.29
Write hit      31.60%
Read hit       99.41%

__ Questions ___________________________________________________________
Total         816.91k    10.9/s
 Com_        292.99k     3.9/s  %Total:  35.87
 DMS         196.77k     2.6/s           24.09
 QC Hits     189.07k     2.5/s           23.14
 COM_QUIT    137.96k     1.8/s           16.89
 +Unknown        123     0.0/s            0.02
Slow 1 s       14.99k     0.2/s            1.84  %DMS:   7.62  Log:  ON
DMS           196.77k     2.6/s           24.09
 SELECT      120.56k     1.6/s           14.76         61.27
 UPDATE       33.33k     0.4/s            4.08         16.94
 INSERT       29.07k     0.4/s            3.56         14.77
 DELETE       13.80k     0.2/s            1.69          7.01
 REPLACE           0       0/s            0.00          0.00
Com_          292.99k     3.9/s           35.87
 set_option  154.52k     2.1/s           18.91
 change_db   137.50k     1.8/s           16.83
 show_variab     204     0.0/s            0.02

__ SELECT and Sort _____________________________________________________
Scan           14.82k     0.2/s %SELECT:  12.29
Range          16.04k     0.2/s           13.30
Full join          14     0.0/s            0.01
Range check         0       0/s            0.00
Full rng join       3     0.0/s            0.00
Sort scan       3.68k     0.0/s
Sort range      2.84k     0.0/s
Sort mrg pass       0       0/s

__ Query Cache _________________________________________________________
Memory usage    2.23M of 256.00M  %Used:   0.87
Block Fragmnt  14.54%
Hits          189.07k     2.5/s
Inserts       102.84k     1.4/s
Insrt:Prune 102.84k:1     1.4/s
Hit:Insert     1.84:1

__ Table Locks _________________________________________________________
Waited             77     0.0/s  %Total:   0.03
Immediate     255.74k     3.4/s

__ Tables ______________________________________________________________
Open              201 of 1638    %Cache:   1.23
Opened            479     0.0/s

__ Connections _________________________________________________________
Max used           52 of  100      %Max:  52.00
Total         137.96k     1.8/s

__ Created Temp ________________________________________________________
Disk table        393     0.0/s
Table           7.31k     0.1/s    Size: 256.0M
File                7     0.0/s

__ Threads _____________________________________________________________
Running             1 of    1
Cached             51 of  384      %Hit:  99.96
Created            52     0.0/s
Slow               10     0.0/s

__ Aborted _____________________________________________________________
Clients             0       0/s
Connects           36     0.0/s

__ Bytes _______________________________________________________________
Sent            2.80G   37.4k/s
Received       66.92M   894.6/s

__ InnoDB Buffer Pool __________________________________________________
Usage         592.00k of   8.00M  %Used:   7.23
Read hit       99.78%
Pages
 Free            475            %Total:  92.77
 Data             37                      7.23 %Drty:   0.00
 Misc              0                      0.00
 Latched           0                      0.00
Reads           9.62k     0.1/s
 From file        21     0.0/s            0.22
 Ahead Rnd         2     0.0/s
 Ahead Sql         0       0/s
Writes              1     0.0/s
Flushes             1     0.0/s
Wait Free           0       0/s

__ InnoDB Lock _________________________________________________________
Waits               0       0/s
Current             0
Time acquiring
 Total             0 ms
 Average           0 ms
 Max               0 ms

__ InnoDB Data, Pages, Rows ____________________________________________
Data
 Reads            37     0.0/s
 Writes            7     0.0/s
 fsync             7     0.0/s
 Pending
   Reads           0
   Writes          0
   fsync           0

Pages
 Created           0       0/s
 Read             37     0.0/s
 Written           1     0.0/s

Rows
 Deleted           0       0/s
 Inserted          0       0/s
 Read             38     0.0/s
 Updated           0       0/s

 

CPU

processor	: 0
vendor_id	: AuthenticAMD
cpu family	: 15
model		: 75
model name	: AMD Athlon(tm) 64 X2 Dual Core Processor 4200+
stepping	: 2
cpu MHz		: 2210.224
cache size	: 512 KB
fdiv_bug	: no
hlt_bug		: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 1
wp		: yes
flags		: fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow up pni cx16 lahf_lm cmp_legacy svm cr8legacy ts fid vid ttp tm stc
bogomips	: 5527.80

 

 

Mam dla ciebie bardzo istotnego hinta. Nie zawsze duże wartości buforów wpływają pozytywnie na wydajność MySQL. Mogę zerknąć na tą bazę i ci to zoptymalizować.

 

Bufory zostaly tak ustawione przez adminow, po moich zgloszeniach (jeszcze przed optymalizacja schematu i zapytan SQL), ze mysql sie muli.

A co proponujesz?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Możesz spokojnie zmniejszyć key_buffer i query_cache, bo i tak nie są wykorzystywane w tak dużym stopniu, co pokazuje mysqlreport (np. query_cache wykorzystane jedynie 2,2MB z 256MB przydzielonych), a wolna pamięc bardziej przydałaby się serwerowi Apache i cachowaniu dysku twardego. Zresztą inne ustawienia też są trochę spore, jak na serwer z 1GB RAM. Więc w my.cnf zmień na:

 

key_buffer = 96M

query_cache_size = 32M

 

i ewentualnie:

 

join_buffer_size = 8M

read_buffer_size = 1M

read_rnd_buffer_size = 1M

 

i potem zrestartuj serwer mysql, żeby zmiany weszły w życie.

 

Ale i tak przejście z Apache'a na Nginxa przyśpieszy dodatkowo serwer.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

ja za to polecałbym zainstalowanie memcache i/lub apc i zrzucać dane z bazy do cache i po cache rzeźbić a nie po bazie, uwierz - wielkie serwisy właśnie po cache rzeźbią bo taniej jest kupić ramu niż całą maszynę;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie no Panie, na glownej mam 0-1 zapytan do bazy.

Wszystko cache'uje ale nie do ramu tylko na dysk (LiteCache).

 

Co do konfiguracji, walcze z tym, zobaczymy przy nastepnej burzy ;)

Dziekuje

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie no Panie, na glownej mam 0-1 zapytan do bazy.

Wszystko cache'uje ale nie do ramu tylko na dysk (LiteCache).

 

Co do konfiguracji, walcze z tym, zobaczymy przy nastepnej burzy :)

Dziekuje

 

Cache na dysk to samobójstwo wydajnościowe w porównaniu z wydajnością memcache. Dodatkowo Ty musisz zrzucać kompletne strony, a w memcache możesz konkretne obiekty w php sobie cache'ować. Aktualnie pracuje w firmie, która prowadzi 19 sporych projektów (najmniejszy ma 8k uu / h), gdyby nie memcache było by ciężko ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zmniejszylem wielkosci buforow, bo faktycznie wykorzystywany byl tylko ich skrawek.

 

Co dokladnie zamiast Apache'a polecilibyscie poczatkujacemu? Zalezy mi na w miare latwej i nieskomplikowanej instalacji/zamianie apacha na jego alternatywe.

 

Co do memcache, dzieki, tez sie tym bede musial zainteresowac.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

powiedzcie mi czy nginx zmniejszy duzo obciazenie procesora, zuzycie ramu przez procesy Apache i load average (mialem w porywach nawet 200 :/)?

 

top - 22:59:53 up 8 days, 23:19,  1 user,  load average: 5.36, 31.98, 57.5939;49mK
Tasks:39;49m  86 39;49mtotal,39;49m   2 39;49mrunning,39;49m  84 39;49msleeping,39;49m   0 39;49mstopped,39;49m   0 39;49mzombie39;49mK
Cpu(s):39;49m 26.0%39;49mus,39;49m 20.7%39;49msy,39;49m  0.0%39;49mni,39;49m 52.0%39;49mid,39;49m  0.0%39;49mwa,39;49m  0.0%39;49mhi,39;49m  0.7%39;49msi,39;49m  0.7%39;49mst39;49mK
Mem: 39;49m  1026196k 39;49mtotal,39;49m   429044k 39;49mused,39;49m   597152k 39;49mfree,39;49m    15616k 39;49mbuffers39;49mK
Swap:39;49m   262136k 39;49mtotal,39;49m       32k 39;49mused,39;49m   262104k 39;49mfree,39;49m   129444k 39;49mcached39;49mK
6;1H
7m  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            39;49mK
8148 apache    15   0 21236  10m 3396 S  3.3  1.0   0:04.82 httpd              39;49m
3682 apache    15   0 21244  10m 3404 S  3.0  1.0   0:07.35 httpd              39;49m
16152 apache    15   0 21192  10m 3364 S  3.0  1.0   0:00.31 httpd              39;49m
8017 apache    15   0 21196  10m 3396 S  2.7  1.0   0:05.43 httpd              39;49m
16138 apache    15   0 21196  10m 3392 S  2.7  1.0   0:00.78 httpd              39;49m
16145 apache    15   0 21228  10m 3372 S  2.7  1.0   0:01.03 httpd              39;49m
8481 apache    15   0 21164  10m 3384 S  2.3  1.0   0:02.90 httpd              39;49m
16148 apache    15   0 21128  10m 3372 S  2.3  1.0   0:00.26 httpd              39;49m
3611 apache    15   0 21276  10m 3400 S  2.0  1.0   0:07.61 httpd              39;49m
8227 apache    15   0 21192  10m 3396 S  2.0  1.0   0:03.62 httpd              39;49m
8031 apache    15   0 21252  10m 3404 S  1.7  1.0   0:05.61 httpd              39;49m
8127 apache    15   0 21196  10m 3396 S  1.7  1.0   0:04.35 httpd              39;49m
8383 apache    15   0 21252  10m 3400 S  1.7  1.0   0:03.55 httpd              39;49m
16144 apache    15   0 21172  10m 3372 S  1.7  1.0   0:00.34 httpd              39;49m
7473 apache    15   0 21288  10m 3392 S  1.3  1.0   0:05.47 httpd              39;49m
7490 apache    15   0 21292  10m 3672 S  1.3  1.1   0:05.70 httpd              39;49m
8352 apache    15   0 21228  10m 3396 S  1.3  1.0   0:04.31 httpd              39;49m6;

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

wyczytalem ze nginx nie obsluguje standardowo htcaccessow, a ja mam SEO linki, uzywam mod_rewrite... czy z uwagi na to nie lepiej byloby wrzucic Lighttpd ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Lighttpd też nie obsługuje mod_rewrite w wersji Apache'owej, ale każde reguły rewrite można przepisać do wersji dla nginx lub lighttpd (mając jakieś o tym pojęcie :) )

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×