PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : افزایش استفاده ی mysql از رم بطور روزانه !



Abolijoon
December 6th, 2015, 15:50
سلام و درود
در یکی از سرور هامون در بخش Process Manager مشاهده میشود که mysql بیشترین استفاده را از رم کرده و درصد آن در حال افزایش میباشد
چطور میتوان دقیقا به مشکل پی برد که کدام اکانت یا بخشی این مشکل را پدیده آورده است.!!
* درکانفیگ هیچ مشکلی وجود ندارد!

سپاس

shivahost
December 6th, 2015, 15:58
معمولا mysql از رم به عنوان کش استفاده می کند و هیچ مشکلی هم نیست! میزانی که mysql از رم استفاده می کند توسط کانفیگ my.cnf قابل تعیین است و اسکریپت mysqltuner هم بهتون عدد دقیق ماکزیمم آن را نشان می دهد. برای سرور با 16 گیگ رم مثلا حتی تا 4 گیگ هم مشکل خاصی نیست.

Abolijoon
December 6th, 2015, 16:02
معمولا mysql از رم به عنوان کش استفاده می کند و هیچ مشکلی هم نیست! میزانی که mysql از رم استفاده می کند توسط کانفیگ my.cnf قابل تعیین است و اسکریپت mysqltuner هم بهتون عدد دقیق ماکزیمم آن را نشان می دهد. برای سرور با 16 گیگ رم مثلا حتی تا 4 گیگ هم مشکل خاصی نیست.

درود
رم سرور 32 می باشد
و این فرایند مصرف روزانه در حال افزایش هست و اگر اینطور پیش برود نهایتا دیتابیس کرش خواهد شد
در حال حاضر 31درصد استفاده میکند که در حال افزایش می باشد.

shivahost
December 6th, 2015, 17:02
درود
رم سرور 32 می باشد
و این فرایند مصرف روزانه در حال افزایش هست و اگر اینطور پیش برود نهایتا دیتابیس کرش خواهد شد
در حال حاضر 31درصد استفاده میکند که در حال افزایش می باشد.

گفتم که باید با my.cnf کنترل کنید و ببینید حداکثر چقدر می تونه از رم استفاده کنه؟ شاید تنظیمات شما زیادی دست mysql را باز گذاشته. از mysqltuner استفاده کنید.

Yas-Host
December 6th, 2015, 17:12
خروجی دستور زیر را قرار دهید :

ps -eo comm,rss|awk '{arr[$1]+=$2} END {for (i in arr) {print arr[i]/1024, i}}'|grep -v '^0 '|sort -n -r| head

میزان مصرف mysql از رم بصورت real time مشخص می شود.

Abolijoon
December 6th, 2015, 17:17
خروجی دستور زیر را قرار دهید :

ps -eo comm,rss|awk '{arr[$1]+=$2} END {for (i in arr) {print arr[i]/1024, i}}'|grep -v '^0 '|sort -n -r| head

میزان مصرف mysql از رم بصورت real time مشخص می شود.

درود
خروجی:


10049.3 mysqld
625.531 httpd
197.281 nginx
71 /usr/local/cpan
64.707 named
24.3516 tailwatchd
11.0156 leechprotect
10.5312 pure-ftpd
10.5039 sshd
7.11328 imap-login

Yas-Host
December 6th, 2015, 17:32
مصرف Real time دیتابیس سرور شما 10 گیگابایت می باشد.

هر چند ساعت یکبار دستور را بزنید و در زمانی که بالا رفت دستور mysqladmin pr را بزنید ببنید کدام دیتابیس پروسس های زیادی را پردازش می کند.

shivahost
December 6th, 2015, 17:35
مصرف Real time دیتابیس سرور شما 10 گیگابایت می باشد.

هر چند ساعت یکبار دستور را بزنید و در زمانی که بالا رفت دستور mysqladmin pr را بزنید ببنید کدام دیتابیس پروسس های زیادی را پردازش می کند.

بله قبلتر خودشون هم گفتن 31% از 32 گیگ رم رو گرفته.

بنظرم کدهای my.cnf رو اینجا بگذارید شاید بشه کمکی کرد.

Abolijoon
December 6th, 2015, 17:37
بله قبلتر خودشون هم گفتن 31% از 32 گیگ رم رو گرفته.

بنظرم کدهای my.cnf رو اینجا بگذارید شاید بشه کمکی کرد.

منظورتون /etc/my.cnf می باشد؟!!




[mysqld]
innodb_file_per_table=1
innodb_buffer_pool_size=10G
innodb_buffer_pool_instances=10
default-storage-engine=MyISAM
max_allowed_packet=1024M
query_cache_size = 10G
query_cache_type=1
thread_cache_size = 384
join_buffer_size=500G
max_connections=2000
local-infile=0
table_cache= 524288
table_open_cache=524288
open_files_limit = 200000
tmp_table_size=256M
max_heap_table_size=256M
wait_timeout=10

shivahost
December 6th, 2015, 17:47
اوه! query_cache_size = 10G خیلی زیاد هست! به 512mb یا حتی کمتر کاهش دهید.



و حتی join_buffer_size=500G را به 8mb یا حتی 4mb کاهش دهید!


الان همه مصرف شما همین
query_cache_size هست!

Yas-Host
December 6th, 2015, 17:47
چه کسی گفته مقدار کوئری کش رو اینقدر بالا بزارید؟!!؟؟؟ هرکس گفته به نظر بنده یک شوت داخل شکمش بزنید!

ما برای سرورمان که 128گیگابایت رم دارد 128مگابایت گذاشتیم! شما برای 32 گیگابایت 10 گیگابایت گذاشتید؟!

مقدار max_connections=2000 هم بسیار بالاست! 800 کنید کافی هست.

مقدار کوئری کش را نیز 16مگابایت کنید کافی هست اگر دیدید سایت ها بعد از مدتی کند می شوند بیشتر کنید مقدار رو.

یا یک کرون جاب FLUSH QUERY CACHE; با استفاده از دستور زیر ایجاد کنید:



mysql -e 'FLUSH QUERY CACHE;'

Abolijoon
December 6th, 2015, 19:02
سپاس از عزیزان



[mysqld]
innodb_file_per_table=1
innodb_buffer_pool_size=10G
innodb_buffer_pool_instances=10
default-storage-engine=MyISAM
max_allowed_packet=1024M
query_cache_size = 64M
query_cache_type=1
thread_cache_size = 384
join_buffer_size=5M
max_connections=800
local-infile=0
table_cache= 524288
table_open_cache=524288
open_files_limit = 200000
tmp_table_size=256M
max_heap_table_size=256M
wait_timeout=10




کانفیگ زیر در نظر گرفته شد
امیدوارم مشکل مذکور حل شه

shivahost
December 6th, 2015, 19:30
سپاس از عزیزان



[mysqld]
innodb_file_per_table=1
innodb_buffer_pool_size=10G
innodb_buffer_pool_instances=10
default-storage-engine=MyISAM
max_allowed_packet=1024M
query_cache_size = 64M
query_cache_type=1
thread_cache_size = 384
join_buffer_size=5M
max_connections=800
local-infile=0
table_cache= 524288
table_open_cache=524288
open_files_limit = 200000
tmp_table_size=256M
max_heap_table_size=256M
wait_timeout=10




کانفیگ زیر در نظر گرفته شد
امیدوارم مشکل مذکور حل شه

بله حل میشه، همش کوئری کش بوده اون میزان رم استفاده شده!

باز با mysqltuner کار کنید ببینید مثلا چقدر innodb دیتا دارید که 10 گیگ براش در نظر گرفتید! معمولا 10 درصد بیشتر از دیتا درنظر می گیرند و الان 10 گیگ ممکنه خیلی زیاد باشه البته بستگی به دیتابیس هاتون داره.