banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Lỗi database trên Centos  XML
  [Question]   Lỗi database trên Centos 29/05/2013 11:54:24 (+0700) | #1 | 276079
phuongtnotv
Member

[Minus]    0    [Plus]
Joined: 04/04/2013 02:40:50
Messages: 17
Offline
[Profile] [PM]
Ai giúp mình sửa lỗi database này với . Mình dùng nginx + php-fpm

Database error in vBulletin :

mysqli_real_connect(): (08004/1040): Too many connections
/home/admin/domains/domain.com/public_html/includes/class_core.php on line 1317

MySQL Error :
Error Number :
Request Date : Wednesday, May 29th 2013 @ 04:13:04 AM
Error Date : Wednesday, May 29th 2013 @ 04:13:04 AM
Script : http://domain.com/external.php?type=feed&forumids=127
Referrer :
IP Address : xxx.28.36.82
Username :
Classname : vB_Database_MySQLi
MySQL Version :
[Up] [Print Copy]
  [Question]   Lỗi database trên Centos 29/05/2013 12:39:15 (+0700) | #2 | 276083
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

phuongtnotv wrote:

mysqli_real_connect(): (08004/1040): Too many connections
 

Nghĩa là hiện đang có quá nhiều kết nối đến DB. Nếu bạn cũng không vào được thì chỉ còn cách đợi thôi.

Khi nào login vào DB được thì bạn chạy lệnh sau và gửi kết quả lên:

Code:
mysql> show global variables like '%timeout';
mysql> show global variables like '%connections';


Nhân tiện cũng nên gửi `my.cnf` lên. Server bạn có bao nhiêu RAM, dùng InnoDB hay MyISAM là chủ yếu?

Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Lỗi database trên Centos 29/05/2013 12:44:35 (+0700) | #3 | 276084
tichuot07
Member

[Minus]    0    [Plus]
Joined: 25/02/2012 10:18:09
Messages: 17
Offline
[Profile] [PM]

quanta wrote:

phuongtnotv wrote:

mysqli_real_connect(): (08004/1040): Too many connections
 

Nghĩa là hiện đang có quá nhiều kết nối đến DB. Nếu bạn cũng không vào được thì chỉ còn cách đợi thôi.

Khi nào login vào DB được thì bạn chạy lệnh sau và gửi kết quả lên:

Code:
mysql> show global variables like '%timeout';
mysql> show global variables like '%connections';


Nhân tiện cũng nên gửi `my.cnf` lên. Server bạn có bao nhiêu RAM, dùng InnoDB hay MyISAM là chủ yếu?

 


mysql> show global variables like '%timeout';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| table_lock_wait_timeout | 50 |
| wait_timeout | 28800 |
+----------------------------+-------+
10 rows in set (0.00 sec)



mysql> show global variables like '%connections';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| max_connections | 100 |
| max_user_connections | 0 |
+----------------------+-------+
2 rows in set (0.00 sec)
[Up] [Print Copy]
  [Question]   Lỗi database trên Centos 29/05/2013 12:55:48 (+0700) | #4 | 276086
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Giảm `wait_timeout` xuống. Theo mình, khoảng 5 phút cũng là nhiều rồi.

Code:
mysql> set global wait_timeout = 300;


Nên có cơ chế monitor số lượng connections, lúc nào thấy đông đông thì vào chạy thử:
Code:
mysql -e "show full processlist\G" | awk -F ": " '/Command/ { print $2 }' | sort | uniq -c | sort -rn


xem có bao nhiêu processes đang Sleep.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Lỗi database trên Centos 29/05/2013 13:55:44 (+0700) | #5 | 276094
phuongtnotv
Member

[Minus]    0    [Plus]
Joined: 04/04/2013 02:40:50
Messages: 17
Offline
[Profile] [PM]

quanta wrote:

phuongtnotv wrote:

mysqli_real_connect(): (08004/1040): Too many connections
 

Nghĩa là hiện đang có quá nhiều kết nối đến DB. Nếu bạn cũng không vào được thì chỉ còn cách đợi thôi.

Khi nào login vào DB được thì bạn chạy lệnh sau và gửi kết quả lên:

Code:
mysql> show global variables like '%timeout';
mysql> show global variables like '%connections';


Nhân tiện cũng nên gửi `my.cnf` lên. Server bạn có bao nhiêu RAM, dùng InnoDB hay MyISAM là chủ yếu?

 


Đây là show global variables like '%timeout';

Code:
mysql> show global variables like '%timeout';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| connect_timeout            | 60    |
| delayed_insert_timeout     | 300   |
| innodb_lock_wait_timeout   | 50    |
| innodb_rollback_on_timeout | OFF   |
| interactive_timeout        | 120   |
| net_read_timeout           | 30    |
| net_write_timeout          | 60    |
| slave_net_timeout          | 3600  |
| table_lock_wait_timeout    | 50    |
| wait_timeout               | 60    |
+----------------------------+-------+
10 rows in set (0.00 sec)


Code:
mysql> show global variables like '%connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| max_connections      | 1024  |
| max_user_connections | 0     |
+----------------------+-------+
2 rows in set (0.00 sec)


đây là my.cnf
Code:
[mysqld]
back_log                        = 100
open-files-limit                = 2048
open-files                      = 256
#max_connect_errors = 100000

skip-external-locking
skip-name-resolve
log_error                       = mysql-error.err
log_slow_queries                = mysql-slow.log

## Per-Thread Buffers * (max_connections) = total per-thread mem usage
thread_stack                    = 64K     #default: 32bit: 192K, 64bit: 256K
sort_buffer_size                = 2M      #default: 2M, larger may cause perf issues
read_buffer_size                = 1M      #default: 128K, change in increments of 4K
read_rnd_buffer_size            = 2M      #default: 256K
join_buffer_size                = 1M      #default: 128K
#binlog_cache_size              = 64K     #default: 32K, size of buffer to hold TX queries
#table_definition_cache = 10000
#table_open_cache = 10000
thread_cache_size = 1024
## total per-thread buffer memory usage: 8832000K = 8.625GB

## Query Cache
#query_cache_type               = 1
query_cache_size                = 1M    #global buffer
query_cache_limit               = 128M  #max query result size to put in cache

## Table and TMP settings
max_heap_table_size             = 256M  #recommend same size as tmp_table_size
bulk_insert_buffer_size         = 256M  #recommend same size as tmp_table_size
tmp_table_size                  = 256M    #recommend 1G min
#net_buffer_length = 16384
## Table cache settings
table_cache                     = 1000  #5.0.x <default: 64>

## Thread settings
thread_concurrency              = 8  #recommend 2x CPU cores
thread_cache_size               = 10  #recommend 5% of max_connections

#Query cache
#query_cache_size = 52428800;
query_cache_type = 1

local-infile=0
socket=/var/lib/mysql/mysql.sock
skip-locking
#skip-innodb
#query_cache_type=1
#query_cache_limit=32M
#query_cache_size=512M
max_connections=1024
interactive_timeout=120
wait_timeout=15
connect_timeout=60

key_buffer= 1M
record_buffer=1M

myisam_sort_buffer_size=256M
myisam_max_sort_file_size       = 2048M


#innodb_read_ahead = none
innodb_file_per_table = 1
innodb_open_files = 1000
#innodb_data_home_dir = /var/lib/mysql/ibdatadir
innodb_data_file_path= ibdata1:4G:autoextend
innodb_buffer_pool_size = 8G
innodb_additional_mem_pool_size = 64M

#innodb_log_group_home_dir = /var/lib/mysql/ibdlogdir
innodb_log_files_in_group = 2
innodb_log_file_size = 128M
innodb_log_buffer_size = 256M
innodb_flush_log_at_trx_commit = 2
#innodb_thread_concurrency = 0
#innodb_lock_wait_timeout=50
#innodb_flush_method = O_DIRECT
innodb_support_xa=0

# 200 * # DISKS
# plugin only
#innodb_io_capacity = 400
#innodb_read_io_threads = 4
#innodb_write_io_threads = 4

max_allowed_packet=128M
max_heap_table_size=32M
key_buffer_size = 512M
#low_priority_updates=1
#concurrent_insert=2
server-id=1

[safe_mysqld]
err-log=/var/log/mysqld.log
nice = -5
open_files_limit=8192

[mysqldump]
quick
max_allowed_packet=256M

[mysql]
no-auto-rehash
#safe-updates

[isamchk]
key_buffer=2048M
sort_buffer=2048M
read_buffer=512M
write_buffer=512M

[myisamchk]
key_buffer=2048M
sort_buffer=2048M
read_buffer=512M
write_buffer=512M

[mysqlhotcopy]
interactive-timeout


Mình dùng InnoDB
[Up] [Print Copy]
  [Question]   Lỗi database trên Centos 29/05/2013 23:59:52 (+0700) | #6 | 276118
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
`wait_timeout` của bạn đã set là 1 phút, đủ nhỏ rồi. Vậy lý do có thể là gì nhỉ?

Nói chung là mình muốn có cơ chế giám sát `Threads_connected`, khi nào gần chạm `max_connections` thì chạy:
Code:
mysql -e "show full processlist\G" | awk -F ": " '/User/ { print $2 }' | sort | uniq -c | sort -rn

xem ai đang mở nhiều connections nhất.

PS: không phải cứ tăng max_connections lên vô tội vạ là sẽ giải quyết được vấn đề này đâu.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Lỗi database trên Centos 30/05/2013 09:07:30 (+0700) | #7 | 276127
phuongtnotv
Member

[Minus]    0    [Plus]
Joined: 04/04/2013 02:40:50
Messages: 17
Offline
[Profile] [PM]

quanta wrote:
`wait_timeout` của bạn đã set là 1 phút, đủ nhỏ rồi. Vậy lý do có thể là gì nhỉ?

Nói chung là mình muốn có cơ chế giám sát `Threads_connected`, khi nào gần chạm `max_connections` thì chạy:
Code:
mysql -e "show full processlist\G" | awk -F ": " '/User/ { print $2 }' | sort | uniq -c | sort -rn

xem ai đang mở nhiều connections nhất.

PS: không phải cứ tăng max_connections lên vô tội vạ là sẽ giải quyết được vấn đề này đâu.
 


KQ khi chạy tại thời điểm cao

Code:
[root@server ~]# mysql -e "show full processlist\G" | awk -F ": " '/User/ { print $2 }' | sort | uniq -c | sort -rn
    145 admin_db
      1 Lan_nana A new account by the name of [URL=http://www.domain.com/member.php?u=196398]Hân_nana[/URL] has been registered. The new account has been moved to the Prevention Usergroup.\r\n\r\nOther recognized logins for this user are
      1 da_admin


Cho mình hỏi luôn 1 chút , cứ 1 tiếng mình lại nhận đc 1 mail cảnh báo này .

Code:
A new message or response with subject:

The service 'dovecot' on server server.domain.com is currently down

has arrived for you to view.
Follow this link to view it:

 http://domain.com:2222/CMD_TICKET?action=view&number=000014857&type=ticket


======================================================
Automatically generated email produced by DirectAdmin 1.38.3



[Up] [Print Copy]
  [Question]   Lỗi database trên Centos 30/05/2013 10:21:04 (+0700) | #8 | 276131
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
145 chưa phải là cao lắm nhỉ, mình thấy bạn để max_connections những 1024 mà.

Lúc nào chạm ngưỡng, bạn lọc tiếp theo Command (post #4) xem chúng đang làm gì:
Code:
mysql -e "show full processlist\G" | awk -F ": " '/Command/ { print $(NF-2) }' | sort | uniq -c | sort -rn

Nên lập một chủ đề khác cho câu hỏi liên quan đến Dovecot.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Lỗi database trên Centos 30/05/2013 10:45:45 (+0700) | #9 | 276133
phuongtnotv
Member

[Minus]    0    [Plus]
Joined: 04/04/2013 02:40:50
Messages: 17
Offline
[Profile] [PM]

quanta wrote:
145 chưa phải là cao lắm nhỉ, mình thấy bạn để max_connections những 1024 mà.

Lúc nào chạm ngưỡng, bạn lọc tiếp theo Command (post #4) xem chúng đang làm gì:
Code:
mysql -e "show full processlist\G" | awk -F ": " '/Command/ { print $(NF-2) }' | sort | uniq -c | sort -rn

Nên lập một chủ đề khác cho câu hỏi liên quan đến Dovecot. 


Code:
[root@server ~]# mysql -e "show full processlist\G" | awk -F ": " '/Command/ { print $(NF-2) }' | sort | uniq -c | sort -rn
    186 Command: Query
     15 Command: Sleep


Mình dùng php-fpm . khi connections lên đến 260 là lỗi 502 bad gateway rồi

Kiểm tra status của php-fpm

Code:
pool:                 domain
process manager:      static
accepted conn:        6139
listen queue len:     0
max listen queue len: -1
idle processes:       1
active processes:     255
total processes:      256
max children reached: 0
[Up] [Print Copy]
  [Question]   Lỗi database trên Centos 30/05/2013 12:26:12 (+0700) | #10 | 276136
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
- Cho mình xem full processlist luôn nhé.
- Cài mysqltuner, chạy và gửi kết quả lên.
- Kiểm tra lại phía ứng dụng xem có chỗ nào dùng persistent connection không.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Lỗi database trên Centos 30/05/2013 14:56:56 (+0700) | #11 | 276145
phuongtnotv
Member

[Minus]    0    [Plus]
Joined: 04/04/2013 02:40:50
Messages: 17
Offline
[Profile] [PM]

quanta wrote:
- Cho mình xem full processlist luôn nhé.
- Cài mysqltuner, chạy và gửi kết quả lên.
- Kiểm tra lại phía ứng dụng xem có chỗ nào dùng persistent connection không. 


processlist mysql full

Code:
mysql> SHOW FULL PROCESSLIST\G
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    758726
Current database: *** NONE ***

*************************** 1. row ***************************
     Id: 758695
   User: admin_domain
   Host: localhost
     db: admin_domain
Command: Sleep
   Time: 0
  State:
   Info: NULL
*************************** 2. row ***************************
     Id: 758697
   User: admin_domain
   Host: localhost
     db: admin_domain
Command: Sleep
   Time: 0
  State:
   Info: NULL
*************************** 3. row ***************************
     Id: 758704
   User: admin_domain
   Host: localhost
     db: admin_domain
Command: Sleep
   Time: 0
  State:
   Info: NULL
*************************** 4. row ***************************
     Id: 758706
   User: admin_domain
   Host: localhost
     db: admin_domain
Command: Sleep
   Time: 0
  State:
   Info: NULL
*************************** 5. row ***************************
     Id: 758711
   User: admin_domain
   Host: localhost
     db: admin_domain
Command: Sleep
   Time: 0
  State:
   Info: NULL
*************************** 6. row ***************************
     Id: 758712
   User: admin_domain
   Host: localhost
     db: admin_domain
Command: Sleep
   Time: 0
  State:
   Info: NULL
*************************** 7. row ***************************
     Id: 758713
   User: admin_domain
   Host: localhost
     db: admin_domain
Command: Sleep
   Time: 0
  State:
   Info: NULL
*************************** 8. row ***************************
     Id: 758714
   User: admin_domain
   Host: localhost
     db: admin_domain
Command: Sleep
   Time: 0
  State:
   Info: NULL
*************************** 9. row ***************************
     Id: 758722
   User: admin_domain
   Host: localhost
     db: admin_domain
Command: Sleep
   Time: 0
  State:
   Info: NULL
*************************** 10. row ***************************
     Id: 758726
   User: root
   Host: localhost
     db: NULL
Command: Query
   Time: 0
  State: NULL
   Info: SHOW FULL PROCESSLIST
10 rows in set (0.01 sec)


mysqltuner
Code:
[root@server ~]# ./mysqltuner.pl

 >>  MySQLTuner 1.0.1 - Major Hayden <major@mhtx.net>
 >>  Bug reports, feature requests, and downloads at http://mysqltuner.com/
 >>  Run with '--help' for additional options and output filtering

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.51a-community-log
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -------------------------------------------
[--] Status: +Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 3G (Tables: 258)
[--] Data in InnoDB tables: 14G (Tables: 146)
[--] Data in MEMORY tables: 14M (Tables: 32)
[!!] Total fragmented tables: 27

-------- Performance Metrics -------------------------------------------------
[--] Up for: 3h 4m 34s (7M q [690.153 qps], 723K conn, TX: 167B, RX: 3B)
[--] Reads / Writes: 76% / 24%
[--] Total buffers: 8.8G global + 6.1M per thread (1024 max threads)
[OK] Maximum possible memory usage: 15.0G (47% of installed RAM)
[OK] Slow queries: 0% (536/7M)
[OK] Highest usage of available connections: 33% (340/1024)
[OK] Key buffer size / total MyISAM indexes: 512.0M/3.2G
[OK] Key buffer hit rate: 97.7% (56M cached / 1M reads)
[OK] Query cache efficiency: 37.6% (1M cached / 4M selects)
[!!] Query cache prunes per day: 16234235
[OK] Sorts requiring temporary tables: 0% (314 temp sorts / 629K sorts)
[!!] Joins performed without indexes: 493
[OK] Temporary tables created on disk: 2% (3K on disk / 120K total)
[OK] Thread cache hit rate: 96% (22K created / 723K connections)
[!!] Table cache hit rate: 0% (64 open / 1M opened)
[OK] Open file limit used: 0% (32/5K)
[OK] Table locks acquired immediately: 97% (7M immediate / 7M locks)
[!!] InnoDB data size / buffer pool: 14.8G/8.0G

-------- Recommendations -----------------------------------------------------
General recommendations:
    Run OPTIMIZE TABLE to defragment tables for better performance
    MySQL started within last 24 hours - recommendations may be inaccurate
    Adjust your join queries to always utilize indexes
    Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
    query_cache_size (> 1M)
    join_buffer_size (> 1020.0K, or always use indexes with joins)
    table_cache (> 64)
    innodb_buffer_pool_size (>= 14G)
[Up] [Print Copy]
  [Question]   Lỗi database trên Centos 30/05/2013 15:06:18 (+0700) | #12 | 276147
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Mình cần full processlist lúc gần chạm ngưỡng ấy chứ 10 cái mà lại toàn Sleep thế kia thì có tác dụng gì.

`my.cnf` nhìn tạm ổn ngoài việc nên tăng `innodb_buffer_pool_size` lên nữa. Bạn có 32G RAM, trước mắt cứ tăng lên... gấp đôi con số hiện tại (16G), sau này có thể tăng lên 24G cũng được (nếu server này không chạy dịch vụ gì khác ngoài MySQL).
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Lỗi database trên Centos 30/05/2013 15:22:04 (+0700) | #13 | 276148
phuongtnotv
Member

[Minus]    0    [Plus]
Joined: 04/04/2013 02:40:50
Messages: 17
Offline
[Profile] [PM]

quanta wrote:
Mình cần full processlist lúc gần chạm ngưỡng ấy chứ 10 cái mà lại toàn Sleep thế kia thì có tác dụng gì.

`my.cnf` nhìn tạm ổn ngoài việc nên tăng `innodb_buffer_pool_size` lên nữa. Bạn có 32G RAM, trước mắt cứ tăng lên... gấp đôi con số hiện tại (16G), sau này có thể tăng lên 24G cũng được (nếu server này không chạy dịch vụ gì khác ngoài MySQL). 


Mình dùng nginx + php-fpm . Do php-fpm chiếm nhiều ram quá (~ 25G) nên mình giảm innodb_buffer_pool_size xuống 8G
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|