2010-01-26 261 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