[Discussion] Nhờ tuning apache và mysql cho website |
12/01/2012 11:24:27 (+0700) | #31 | 252329 |
pntri85
Member
|
0 |
|
|
Joined: 25/08/2011 07:37:41
Messages: 83
Offline
|
|
Sau 1 ngày compile và tuning lại Apache-Mysql-Php ,sau đó em sử dụng tool ab để benchmak .Kết quá như sau:
$ ab -n 1000 -c 300 http://myip/index.php
Document Path: /index.php
Document Length: 179391 bytes
Concurrency Level: 300
Time taken for tests: 100.047 seconds
Complete requests: 1000
Failed requests: 860
(Connect: 0, Receive: 0, Length: 860, Exceptions: 0)
Write errors: 0
Total transferred: 179794500 bytes
HTML transferred: 179401500 bytes
Requests per second: 10.00 [#/sec] (mean)
Time per request: 30014.238 [ms] (mean)
Time per request: 100.047 [ms] (mean, across all concurrent requests)
Transfer rate: 1754.97 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 292 880.2 2 3015
Processing: 12423 27956 5477.2 28926 42784
Waiting: 12324 27915 5516.7 28906 42762
Total: 12425 28247 5527.5 29325 42809
Percentage of the requests served within a certain time (ms)
50% 29325
66% 30529
75% 31184
80% 31720
90% 33203
95% 36224
98% 39332
99% 41009
100% 42809 (longest request)
Kết quả lệnh top lúc đang benchmark
top - 12:11:55 up 10:24, 1 user, load average: 233.39, 111.62, 52.73
Tasks: 502 total, 11 running, 491 sleeping, 0 stopped, 0 zombie
Cpu(s): 50.5%us, 12.2%sy, 0.0%ni, 37.0%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 8148540k total, 6202800k used, 1945740k free, 7296k buffers
Swap: 16385132k total, 0k used, 16385132k free, 2451408k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30883 mysql 0 -15 683m 145m 4264 S 119.0 1.8 20:32.58 mysqld
3791 daemon 16 0 169m 15m 3396 D 2.6 0.2 0:01.85 httpd
4126 daemon 16 0 169m 16m 3396 D 2.6 0.2 0:01.99 httpd
4534 daemon 16 0 169m 15m 3396 D 2.6 0.2 0:00.81 httpd
2300 daemon 16 0 169m 15m 3420 D 2.3 0.2 0:05.66 httpd
3743 daemon 16 0 169m 16m 3396 D 2.3 0.2 0:02.25 httpd
3976 daemon 16 0 169m 16m 3396 D 2.3 0.2 0:01.90 httpd
3987 daemon 16 0 169m 16m 3396 D 2.3 0.2 0:01.97 httpd
4007 daemon 16 0 169m 16m 3400 D 2.3 0.2 0:01.97 httpd
4140 daemon 16 0 169m 16m 3396 D 2.3 0.2 0:01.96 httpd
4143 daemon 16 0 169m 15m 3396 D 2.3 0.2 0:01.79 httpd
4171 daemon 16 0 169m 15m 3400 D 2.3 0.2 0:01.87 httpd
4234 daemon 15 0 170m 16m 3400 D 2.3 0.2 0:01.93 httpd
3859 daemon 16 0 169m 16m 3396 D 2.0 0.2 0:01.94 httpd
3867 daemon 16 0 169m 16m 3396 D 2.0 0.2 0:01.97 httpd
3925 daemon 16 0 169m 16m 3396 D 2.0 0.2 0:01.89 httpd
3980 daemon 16 0 169m 16m 3396 D 2.0 0.2 0:01.93 httpd
3981 daemon 16 0 169m 16m 3404 D 2.0 0.2 0:01.90 httpd
3997 daemon 15 0 169m 15m 3396 D 2.0 0.2 0:01.84 httpd
3999 daemon 16 0 169m 16m 3396 D 2.0 0.2 0:01.87 httpd
4004 daemon 15 0 169m 16m 3396 D 2.0 0.2 0:01.94 httpd
4008 daemon 16 0 169m 16m 3396 D 2.0 0.2 0:01.95 httpd
4057 daemon 15 0 169m 15m 3396 D 2.0 0.2 0:01.84 httpd
4157 daemon 16 0 169m 16m 3396 D 2.0 0.2 0:01.93 httpd
4172 daemon 16 0 169m 15m 3400 D 2.0 0.2 0:01.88 httpd
4179 daemon 16 0 169m 15m 3400 D 2.0 0.2 0:01.86 httpd
4186 daemon 16 0 169m 15m 3400 D 2.0 0.2 0:01.88 httpd
4187 daemon 16 0 169m 15m 3400 D 2.0 0.2 0:01.81 httpd
4231 daemon 16 0 169m 16m 3400 D 2.0 0.2 0:01.87 httpd
4236 daemon 16 0 169m 15m 3400 D 2.0 0.2 0:01.78 httpd
4241 daemon 15 0 169m 15m 3400 D 2.0 0.2 0:01.79 httpd
4248 daemon 16 0 169m 15m 3400 D 2.0 0.2 0:01.83 httpd
4255 daemon 16 0 169m 15m 3400 D 2.0 0.2 0:01.86 httpd
Lúc này thì khi truy cập vào web load rất lâu.
Mọi người xem giúp em lần nữa xem tình trang này có cách nào giải quyết ko?Có cần nâng cấp phần cứng hay config lại Server nữa ko?
|
|
|
|
|
[Discussion] Nhờ tuning apache và mysql cho website |
12/01/2012 12:27:25 (+0700) | #32 | 252333 |
|
Ikut3
Elite Member
|
0 |
|
|
Joined: 24/09/2007 23:47:03
Messages: 1429
Location: Nhà hát lớn
Offline
|
|
@pntri85 : Sao bạn không cố kiểm tra trong MYSQL câu query nào đang chiếm nhiều tài nguyên hệ thống nhất ?
|
|
|
|
|
[Discussion] Nhờ tuning apache và mysql cho website |
12/01/2012 14:07:06 (+0700) | #33 | 252339 |
pntri85
Member
|
0 |
|
|
Joined: 25/08/2011 07:37:41
Messages: 83
Offline
|
|
Ikut3 wrote:
@pntri85 : Sao bạn không cố kiểm tra trong MYSQL câu query nào đang chiếm nhiều tài nguyên hệ thống nhất ?
Trong slow query log hôm trước mình post lên có thấy rất nhiều câu query lớn hơn 10s,bạn xem lại giúp mình log slow query mình gửi lên xem thử có điểm nào bất thường ko, vì mình cũng đang phân vân ko biết là do mysql quá tải dẫn đến xử lý các câu query đó chậm hay là do bản thân các câu query đó làm cho mysql quá tải.Em cũng còn thiếu kinh nghiệm nên mong mọi người nhiệt tình giúp đỡ.Chân thành cảm ơn |
|
|
|
|
[Discussion] Nhờ tuning apache và mysql cho website |
12/01/2012 14:43:52 (+0700) | #34 | 252345 |
myquartz
Member
|
0 |
|
|
Joined: 04/01/2005 04:58:30
Messages: 563
Offline
|
|
Hi!
Xem qua thấy có câu lệnh sql này chạy nhiều và lâu:
Code:
select tag.tag from tbltag tag JOIN tbltagitem tagitem ON tag.ID= tagitem.idtag where tagitem.iditem='xxxx';
Nhìn các đoạn code SQL thì có lẽ cái này là Joomla hoặc Mambo. 2 soft này ngốn MySQL kinh khủng. một request của HTTP vào trang có thể tạo ra từ 20-50 SQL query => ko có MySQL nào chịu nổi. Bạn nên đọc 1 chút để tuning tham số trên Joomla, ví dụ tắt bớt logging, tracing... để giảm số query xuống. Google đầy các bài về tuning cái này.
Một việc nữa là về tuning DB, ko cần phải compile lại làm gì, cứ chơi gói chuẩn của CentOS, tham số trong my.cnf thì theo cái file ví dụ huge/large của bộ cài MySQL ấy (4GB RAM khá to đấy). Quan trọng bạn phải analyze các table trong db cần dùng, hoặc chạy optimize các bảng này.
Ngoài ra đánh thêm các index cần thiết (nếu chưa có), ví dụ bảng trên là bảng tbltag, và tbltagitem thì 2 trường tbltag.ID và tagitem.iditem cần được đánh index. Cái này phải dò từng câu lệnh slow để xem cụ thể, để đánh từng cái một.
Về mặt apache, nếu có thể nâng chạy CentOS 6. với php5.3, apache chuyển chạy worker thay vì prefork, php thì có zend engine. Nó sẽ giúp cho apache giảm bớt memory chiếm cho mỗi session, php chạy tối ưu hơn.
Với 300-400 session với joomla mà đã chậm thì là quá ít với server có 4GB RAM, tớ đã đạt con số gấp 4-5 lần như thế với server cấu hình tương tự. |
|
|
|
|
[Discussion] Nhờ tuning apache và mysql cho website |
12/01/2012 15:11:28 (+0700) | #35 | 252347 |
pntri85
Member
|
0 |
|
|
Joined: 25/08/2011 07:37:41
Messages: 83
Offline
|
|
myquartz wrote:
Hi!
Xem qua thấy có câu lệnh sql này chạy nhiều và lâu:
Code:
select tag.tag from tbltag tag JOIN tbltagitem tagitem ON tag.ID= tagitem.idtag where tagitem.iditem='xxxx';
Nhìn các đoạn code SQL thì có lẽ cái này là Joomla hoặc Mambo. 2 soft này ngốn MySQL kinh khủng. một request của HTTP vào trang có thể tạo ra từ 20-50 SQL query => ko có MySQL nào chịu nổi. Bạn nên đọc 1 chút để tuning tham số trên Joomla, ví dụ tắt bớt logging, tracing... để giảm số query xuống. Google đầy các bài về tuning cái này.
Một việc nữa là về tuning DB, ko cần phải compile lại làm gì, cứ chơi gói chuẩn của CentOS, tham số trong my.cnf thì theo cái file ví dụ huge/large của bộ cài MySQL ấy (4GB RAM khá to đấy). Quan trọng bạn phải analyze các table trong db cần dùng, hoặc chạy optimize các bảng này.
Ngoài ra đánh thêm các index cần thiết (nếu chưa có), ví dụ bảng trên là bảng tbltag, và tbltagitem thì 2 trường tbltag.ID và tagitem.iditem cần được đánh index. Cái này phải dò từng câu lệnh slow để xem cụ thể, để đánh từng cái một.
Về mặt apache, nếu có thể nâng chạy CentOS 6. với php5.3, apache chuyển chạy worker thay vì prefork, php thì có zend engine. Nó sẽ giúp cho apache giảm bớt memory chiếm cho mỗi session, php chạy tối ưu hơn.
Với 300-400 session với joomla mà đã chậm thì là quá ít với server có 4GB RAM, tớ đã đạt con số gấp 4-5 lần như thế với server cấu hình tương tự.
Hi bạn,site của mình là site về bán hàng online,code do 1 công ty khác triển khai,ko có sài Joomla hay open source nào hết.Theo như hướng dẫn của bạn thì để mình cố optimize lại database thử xem.Vấn đề hiện tại thì mình xác định nguyên nhân là do mysql nhưng chưa biết phải khắc phục nó làm sao.
Còn về Server chạy apache với prefork là do mình thấy nhiều người recommend là nếu dùng php thì nên chạy với MPM Prefork,tuy nhiên mình thấy chạy với Prefork nó tốn Ram nhiều quá.Nếu được bạn có thể hướng dẫn mình build apache dùng MPM worker với PHP FastCGI hay mod ko? Thanks bạn nhiều. |
|
|
|
|
[Discussion] Nhờ tuning apache và mysql cho website |
12/01/2012 15:17:11 (+0700) | #36 | 252348 |
myquartz
Member
|
0 |
|
|
Joined: 04/01/2005 04:58:30
Messages: 563
Offline
|
|
Tớ làm như sau:
1. Cài đặt apache chuẩn của CentOS 6. (gói có tên httpd)
2. Cài đặt php-zts (cho phép php chạy với mod worker).
3. Sửa file config /etc/sysconfig/httpd, bỏ comment (dấu #) cái dòng: #HTTPD=/usr/sbin/httpd.worker
Khởi động lại httpd, thế là chạy dưới worker rồi. Lúc này việc config số lượng client/max request... cho httpd là ở phần:
Code:
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Bạn phải test ứng dụng của bạn trước. Nói chung nếu là ứng dụng bán hàng viết chuẩn và ko dùng các module linh tinh ngoài thêm vào thì sẽ chạy ngon.
P/S: mình cũng vừa thử test, bật worker lên, module thiếu nhiều lắm khi chạy với php-zts (ví dụ mysql). Do đó có thể bạn phải compile riêng cái này với tùy chọn khác. Mặc định câu lệnh configure nó thế này (với máy mình), nhiều without quá:
'./configure' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--disable-rpath' '--without-pear' '--with-bz2' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--with-xpm-dir=/usr' '--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-sysvmsg' '--with-kerberos' '--enable-ucd-snmp-hack' '--enable-shmop' '--enable-calendar' '--without-sqlite' '--with-libxml-dir=/usr' '--enable-xml' '--with-system-tzdata' '--with-apxs2=/usr/sbin/apxs' '--without-mysql' '--without-gd' '--disable-dom' '--disable-dba' '--without-unixODBC' '--disable-pdo' '--disable-xmlreader' '--disable-xmlwriter' '--without-sqlite3' '--disable-phar' '--disable-fileinfo' '--disable-json' '--without-pspell' '--disable-wddx' '--without-curl' '--disable-posix' '--disable-sysvmsg' '--disable-sysvshm' '--disable-sysvsem' '--enable-maintainer-zts' '--with-config-file-scan-dir=/etc/php-zts.d'
Cái này có thể phải ngâm cứu thêm 1 chút và build thử. |
|
|
|
|
[Discussion] Nhờ tuning apache và mysql cho website |
12/01/2012 15:57:00 (+0700) | #37 | 252355 |
|
Ikut3
Elite Member
|
0 |
|
|
Joined: 24/09/2007 23:47:03
Messages: 1429
Location: Nhà hát lớn
Offline
|
|
Trong slow query log hôm trước mình post lên có thấy rất nhiều câu query lớn hơn 10s,bạn xem lại giúp mình log slow query mình gửi lên xem thử có điểm nào bất thường ko, vì mình cũng đang phân vân ko biết là do mysql quá tải dẫn đến xử lý các câu query đó chậm hay là do bản thân các câu query đó làm cho mysql quá tải.Em cũng còn thiếu kinh nghiệm nên mong mọi người nhiệt tình giúp đỡ.Chân thành cảm ơn
Hello, theo mình nếu như vậy bạn nên xác định kĩ hơn việc tunning lại thằng MySQL. Mình thấy có 1 số giải pháp caching các câu query thường dùng để performance nhanh hơn. Tuy nhiên cái vấn đề mà mình nghĩ là do cấu trúc, tức là hệ thống MySQL chưa được design tốt. Chỉ 8 rows mà ngốn từng ấy RAm & CPU thì quả thật bất thường ?
Thanks |
|
|
|
|
[Discussion] Nhờ tuning apache và mysql cho website |
12/01/2012 16:10:40 (+0700) | #38 | 252356 |
pntri85
Member
|
0 |
|
|
Joined: 25/08/2011 07:37:41
Messages: 83
Offline
|
|
myquartz wrote:
Tớ làm như sau:
1. Cài đặt apache chuẩn của CentOS 6. (gói có tên httpd)
2. Cài đặt php-zts (cho phép php chạy với mod worker).
3. Sửa file config /etc/sysconfig/httpd, bỏ comment (dấu #) cái dòng: #HTTPD=/usr/sbin/httpd.worker
Khởi động lại httpd, thế là chạy dưới worker rồi. Lúc này việc config số lượng client/max request... cho httpd là ở phần:
Code:
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Bạn phải test ứng dụng của bạn trước. Nói chung nếu là ứng dụng bán hàng viết chuẩn và ko dùng các module linh tinh ngoài thêm vào thì sẽ chạy ngon.
P/S: mình cũng vừa thử test, bật worker lên, module thiếu nhiều lắm khi chạy với php-zts (ví dụ mysql). Do đó có thể bạn phải compile riêng cái này với tùy chọn khác. Mặc định câu lệnh configure nó thế này (với máy mình), nhiều without quá:
'./configure' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--disable-rpath' '--without-pear' '--with-bz2' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--with-xpm-dir=/usr' '--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-sysvmsg' '--with-kerberos' '--enable-ucd-snmp-hack' '--enable-shmop' '--enable-calendar' '--without-sqlite' '--with-libxml-dir=/usr' '--enable-xml' '--with-system-tzdata' '--with-apxs2=/usr/sbin/apxs' '--without-mysql' '--without-gd' '--disable-dom' '--disable-dba' '--without-unixODBC' '--disable-pdo' '--disable-xmlreader' '--disable-xmlwriter' '--without-sqlite3' '--disable-phar' '--disable-fileinfo' '--disable-json' '--without-pspell' '--disable-wddx' '--without-curl' '--disable-posix' '--disable-sysvmsg' '--disable-sysvshm' '--disable-sysvsem' '--enable-maintainer-zts' '--with-config-file-scan-dir=/etc/php-zts.d'
Cái này có thể phải ngâm cứu thêm 1 chút và build thử.
Cảm ơn bạn nhiều,nhưng hiện tại mình thử compile Apache chạy MPM worker với PHP sử dụng mod mod_cgid từ source chứ ko cài bằng yum .Các bước cài đặt của mình :
Apache:
./configure --prefix=/etc/apache2 --with-mpm=worker --enable-so --enable-rewrite --enable-alias --enable-unique-id --enable-headers --disable-cgi --disable-include --disable-asis --disable-negotiation --disable-actions--disable-userdir --disable-env –disable-status
Download mod_fcgid từ http://www.apache.org/dist/httpd/mod_fcgid/mod_fcgid-2.3.6.tar.gz
và chạy các lệnh:
APXS=/etc/apache2/bin/apxs ./configure.apxs
make
make install
Cài php
./configure --prefix=/usr/local/php5 --with-libdir=lib64 --without-apxs --enable-fpm --with-config-file-path=/usr/local/php5 --with-mysql --with-mysqli --with-pdo-mysql --with-gd --with-jpeg-dir --with-png-dir --with-curl --with-mcrypt --enable-mbstring --enable-soap --without-pgsql
Tuy nhiên mình vẫn ko cấu hình cho PHP sử dụng mod_cgid được. Bạn và mọi người có thể hướng dẫn mình config tiếp ko?Thanks
|
|
|
|
|
[Discussion] Nhờ tuning apache và mysql cho website |
14/01/2012 11:16:51 (+0700) | #39 | 252449 |
pntri85
Member
|
0 |
|
|
Joined: 25/08/2011 07:37:41
Messages: 83
Offline
|
|
Sau khi thử Apache MPM worker với PHP-FPM không thành công thì em chuyển sang chạy Nginx làm reverse proxy cho Apache MPM Prefork vì website công ty có dùng htaccess nên ko dùng trực tiếp Nginx được,kết quả thấy website load nhanh,tuy nhiên em chưa biết dùng tool nào để thử benchmark web server với số request khoảng tầm 400 request đồng thời , ai có kinh nghiệm benchmark web server thì giúp em với .Em xin cảm ơn
Gần về quê ăn tết rồi mà còn bị như vầy,khổ quá ....Mong mọi người nhiệt tình giúp đỡ em út . |
|
|
[Discussion] Nhờ tuning apache và mysql cho website |
14/01/2012 13:33:21 (+0700) | #40 | 252458 |
|
azteam
Member
|
0 |
|
|
Joined: 17/03/2007 21:12:46
Messages: 177
Location: /dev/null
Offline
|
|
Chào bạn,
Có khá nhiều tools dùng để benchmark webserver. Bạn có thể sử dụng tool ab (http://httpd.apache.org/docs/2.0/programs/ab.html) hoặc httperf (http://www.hpl.hp.com/research/linux/httperf/).
Thân. |
|
|
|