2010-01-26 112 views
4

我有一個生產服務器每月約400萬的頁面瀏覽量。服務器擁有8GB的RAM,而mysql充當數據庫。mysql永遠不會釋放內存

我在處理mysql來承擔這個負載時遇到問題。我需要每天重啓兩次mysql來處理這個事情。與MySQL的問題是,它從一些特定的職業開始,由MySQL消耗的內存不斷增加,直到它達到它可以消耗的最大值,然後MySQL停止響應緩慢或根本沒有響應,這凍結了服務器。

我的所有表格都已正確建立索引並且沒有長時間查詢。我需要一些人來幫助如何去調試在這裏做什麼。

我所有的桌子都是myisam。

我已經嘗試配置參數key_buffer等,但沒有救援。任何形式的幫助,不勝感激。以下是一些可能有用的參數。

mysql --version 
mysql Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (i686) using readline 5.1 


mysql> show variables; 
+---------------------------------+------------------------------------------------------------+ 
| Variable_name     | Value              | 
+---------------------------------+------------------------------------------------------------+ 
| auto_increment_increment  | 1               | 
| auto_increment_offset   | 1               | 
| automatic_sp_privileges   | ON               | 
| back_log      | 50               | 
| basedir       | /usr/              | 
| bdb_cache_size     | 8384512             | 
| bdb_home      | /var/lib/mysql/           | 
| bdb_log_buffer_size    | 262144              | 
| bdb_logdir      |               | 
| bdb_max_lock     | 10000              | 
| bdb_shared_data     | OFF              | 
| bdb_tmpdir      | /tmp/              | 
| binlog_cache_size    | 32768              | 
| bulk_insert_buffer_size   | 8388608             | 
| character_set_client   | latin1              | 
| character_set_connection  | latin1              | 
| character_set_database   | latin1              | 
| character_set_filesystem  | binary              | 
| character_set_results   | latin1              | 
| character_set_server   | latin1              | 
| character_set_system   | utf8              | 
| character_sets_dir    | /usr/share/mysql/charsets/         | 
| collation_connection   | latin1_swedish_ci           | 
| collation_database    | latin1_swedish_ci           | 
| collation_server    | latin1_swedish_ci           | 
| completion_type     | 0               | 
| concurrent_insert    | 1               | 
| connect_timeout     | 10               | 
| datadir       | /var/lib/mysql/           | 
| date_format      | %Y-%m-%d             | 
| datetime_format     | %Y-%m-%d %H:%i:%s           | 
| default_week_format    | 0               | 
| delay_key_write     | ON               | 
| delayed_insert_limit   | 100              | 
| delayed_insert_timeout   | 300              | 
| delayed_queue_size    | 1000              | 
| div_precision_increment   | 4               | 
| keep_files_on_create   | OFF              | 
| engine_condition_pushdown  | OFF              | 
| expire_logs_days    | 0               | 
| flush       | OFF              | 
| flush_time      | 0               | 
| ft_boolean_syntax    | + -><()~*:""&|            | 
| ft_max_word_len     | 84               | 
| ft_min_word_len     | 4               | 
| ft_query_expansion_limit  | 20               | 
| ft_stopword_file    | (built-in)             | 
| group_concat_max_len   | 1024              | 
| have_archive     | NO               | 
| have_bdb      | YES              | 
| have_blackhole_engine   | NO               | 
| have_compress     | YES              | 
| have_crypt      | YES              | 
| have_csv      | NO               | 
| have_dynamic_loading   | YES              | 
| have_example_engine    | NO               | 
| have_federated_engine   | NO               | 
| have_geometry     | YES              | 
| have_innodb      | YES              | 
| have_isam      | NO               | 
| have_merge_engine    | YES              | 
| have_ndbcluster     | NO               | 
| have_openssl     | DISABLED             | 
| have_ssl      | DISABLED             | 
| have_query_cache    | YES              | 
| have_raid      | NO               | 
| have_rtree_keys     | YES              | 
| have_symlink     | YES              |           | 
| init_connect     |               | 
| init_file      |               | 
| init_slave      |               | 
| interactive_timeout    | 28800              | 
| join_buffer_size    | 131072              | 
| key_buffer_size     | 2621440000             | 
| key_cache_age_threshold   | 300              | 
| key_cache_block_size   | 1024              | 
| key_cache_division_limit  | 100              | 
| language      | /usr/share/mysql/english/         | 
| large_files_support    | ON               | 
| large_page_size     | 0               | 
| large_pages      | OFF              | 
| lc_time_names     | en_US              | 
| license       | GPL              | 
| local_infile     | ON               | 
| locked_in_memory    | OFF              | 
| log        | OFF              | 
| log_bin       | ON               | 
| log_bin_trust_function_creators | OFF              | 
| log_error      |               | 
| log_queries_not_using_indexes | OFF              | 
| log_slave_updates    | OFF              | 
| log_slow_queries    | ON               | 
| log_warnings     | 1               | 
| long_query_time     | 8               | 
| low_priority_updates   | OFF              | 
| lower_case_file_system   | OFF              | 
| lower_case_table_names   | 0               | 
| max_allowed_packet    | 8388608             | 
| max_binlog_cache_size   | 4294963200             | 
| max_binlog_size     | 1073741824             | 
| max_connect_errors    | 10               | 
| max_connections     | 400              | 
| max_delayed_threads    | 20               | 
| max_error_count     | 64               | 
| max_heap_table_size    | 16777216             | 
| max_insert_delayed_threads  | 20               | 
| max_join_size     | 4294967295             | 
| max_length_for_sort_data  | 1024              | 
| max_prepared_stmt_count   | 16382              | 
| max_relay_log_size    | 0               | 
| max_seeks_for_key    | 4294967295             | 
| max_sort_length     | 1024              | 
| max_sp_recursion_depth   | 0               | 
| max_tmp_tables     | 32               | 
| max_user_connections   | 0               | 
| max_write_lock_count   | 4294967295             | 
| multi_range_count    | 256              | 
| myisam_data_pointer_size  | 6               | 
| myisam_max_sort_file_size  | 2146435072             | 
| myisam_recover_options   | OFF              | 
| myisam_repair_threads   | 1               | 
| myisam_sort_buffer_size   | 16777216             | 
| myisam_stats_method    | nulls_unequal            | 
| net_buffer_length    | 16384              | 
| net_read_timeout    | 30               | 
| net_retry_count     | 10               | 
| net_write_timeout    | 60               | 
| new        | OFF              | 
| old_passwords     | OFF              | 
| open_files_limit    | 2000              | 
| optimizer_prune_level   | 1               | 
| optimizer_search_depth   | 62               | 
| pid_file      | /var/run/mysqld/mysqld.pid         | 
| plugin_dir      |               | 
| port       | 3306              | 
| preload_buffer_size    | 32768              | 
| profiling      | OFF              | 
| profiling_history_size   | 15               | 
| protocol_version    | 10               | 
| query_alloc_block_size   | 8192              | 
| query_cache_limit    | 1048576             | 
| query_cache_min_res_unit  | 4096              | 
| query_cache_size    | 134217728             | 
| query_cache_type    | ON               | 
| query_cache_wlock_invalidate | OFF              | 
| query_prealloc_size    | 8192              | 
| range_alloc_block_size   | 4096              | 
| read_buffer_size    | 2097152             | 
| read_only      | OFF              | 
| read_rnd_buffer_size   | 8388608             | 
| relay_log      |               | 
| relay_log_index     |               | 
| relay_log_info_file    | relay-log.info            | 
| relay_log_purge     | ON               | 
| relay_log_space_limit   | 0               | 
| rpl_recovery_rank    | 0               | 
| secure_auth      | OFF              | 
| secure_file_priv    |               | 
| server_id      | 1               | 
| skip_external_locking   | ON               | 
| skip_networking     | OFF              | 
| skip_show_database    | OFF              | 
| slave_compressed_protocol  | OFF              | 
| slave_load_tmpdir    | /tmp/              | 
| slave_net_timeout    | 3600              | 
| slave_skip_errors    | OFF              | 
| slave_transaction_retries  | 10               | 
| slow_launch_time    | 2               | 
| socket       | /var/lib/mysql/mysql.sock         | 
| sort_buffer_size    | 2097152             | 
| sql_big_selects     | ON               | 
| sql_mode      |               | 
| sql_notes      | ON               | 
| sql_warnings     | OFF              | 
| ssl_ca       |               | 
| ssl_capath      |               | 
| ssl_cert      |               | 
| ssl_cipher      |               | 
| ssl_key       |               | 
| storage_engine     | MyISAM              | 
| sync_binlog      | 0               | 
| sync_frm      | ON               | 
| system_time_zone    | CST              | 
| table_cache      | 256              | 
| table_lock_wait_timeout   | 50               | 
| table_type      | MyISAM              | 
| thread_cache_size    | 8               | 
| thread_stack     | 196608              | 
| time_format      | %H:%i:%s             | 
| time_zone      | SYSTEM              | 
| timed_mutexes     | OFF              | 
| tmp_table_size     | 33554432             | 
| tmpdir       | /tmp/              | 
| transaction_alloc_block_size | 8192              | 
| transaction_prealloc_size  | 4096              | 
| tx_isolation     | REPEATABLE-READ           | 
| updatable_views_with_limit  | YES              | 
| version       | 5.0.77-log             | 
| version_bdb      | Sleepycat Software: Berkeley DB 4.1.24: (January 29, 2009) | 
| version_comment     | Source distribution          | 
| version_compile_machine   | i686              | 
| version_compile_os    | redhat-linux-gnu           | 
| wait_timeout     | 28800              | 
+---------------------------------+------------------------------------------------------------+ 
+0

是否有越來越多的開放連接...是否有可能存在連接泄漏? – 2010-01-26 12:12:24

+0

你應該跟蹤連接 - 你的webapp是這個mysql服務器的唯一「用戶」嗎? – onigunn 2010-01-26 12:35:00

+0

是的..該webapp是這個msql服務器的唯一用戶 @gid ..我檢查過,這不是連接泄漏。 謝謝。 – Ishu 2010-01-26 15:21:02

回答

1

你在那裏做了很多斷言。

而你還沒有說過生成查詢/消耗數據的是什麼。

儘管MySQL可能存在無證內存泄漏 - 這是我從未遇到過的一個問題。

我會做的第一件事就是查看頂部按內存排序來查看使用大量內存/什麼是抓取更多內存的內容。我懷疑你可能發現它的客戶沒有正確發佈結果集可能會導致問題。

+0

我想我寫道這是一個生成和消費查詢的大型Web應用程序的生產服務器。或者有一些具體的問題我的問題不清楚。 謝謝。 – Ishu 2010-01-26 11:50:47

+0

我已經檢查過它不是客戶端。它總是抓住按內存排序的unix top命令的頂部插槽。另一件事導致我認爲它不是客戶端,即使我重新啓動apache以釋放它所持有的所有東西,即使這樣服務器負載很重,除非我重新啓動mysql。這加強了我的信念,即它的mysql這是把它關閉...... – Ishu 2010-01-26 11:52:48

2

你有你的key_buffer設置爲2.5Gb,對不對?

這是一個32位系統。

你在開玩笑嗎?

如果您打算在服務器上運行MySQL,您確實需要使用64位操作系統。否則,你無法合理使用足夠的內存。它可能用盡了地址空間,而不是內存。這會導致您遇到的問題。

進程可以在32位Linux中使用的最大地址空間通常在3G左右。你在大型關鍵緩衝區大部分時間都在吹,留下的呼吸空間很小。

作爲臨時解決方法,大量減少關鍵緩衝區。您應該開始監視VM使用情況,直到您可以遷移到64位。

+0

嗯......一個非常有效的點Mark ..但是我的交通周圍我不能真正減少關鍵緩衝區很多與ISAM表,雖然我有現在讓他們達到1.8G。你怎麼看? 謝謝。 – Ishu 2010-01-26 15:11:54

+1

流量不一定是問題 - 請考慮您的表的索引有多大。如果你的數據庫很小,或者常用的子集很小,關鍵緩衝區不需要那麼大。但從長遠來看,轉向64位聽起來似乎是個好主意。 – MarkR 2010-01-26 21:48:21