大牛?无他,唯手熟尔!

CentOS上mysql占用内存过大之解决

2015-12-22 12:54:31来源:caogenjava阅读[2499]评论[0]
摘要:本站刚换到阿里云服务器上,使用的是centos系统,相关环境都是自己手动安装的,昨天想在服务器上安装个ftp,却报内存分配失败,显然是内存不够了吗!使用top命令一查看,剩余内存还剩几兆,mysql自己就占用了系统一半多的内存(我购买的是1G内存的配置),这种情况哪能受得了。于是各种查找,最终算是解决了吧。

本文由草根java提供,转载请注明出处https://www.caogenjava.com/detail/69.html

本站刚换到阿里云服务器上,使用的是centos系统,相关环境都是自己手动安装的,昨天想在服务器上安装个ftp,却报内存分配失败,显然是内存不够了吗!使用top命令一查看,剩余内存还剩几兆,mysql自己就占用了系统一半多的内存(我购买的是1G内存的配置),这种情况哪能受得了。于是各种查找,最终算是解决了吧。

centos上mysql占用内存情况-草根java

解决思路很明确,就是修改配置文件/etc/my.cnf,以下是我修改后的配置,大家请参考。

[mysqld]
lower_case_table_names=1
character-set-server=utf8
max_connections = 300
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
key_buffer_size = 16k
max_allowed_packet = 1M
thread_stack = 64k
sort_buffer_size = 64k
net_buffer_length = 2k
performance_schema_max_table_instances = 12500
table_open_cache_instances = 1
eq_range_index_dive_limit = 10
innodb_buffer_pool_dump_at_shutdown = OFF
innodb_buffer_pool_load_at_startup = OFF
innodb_checksum_algorithm = innodb
innodb_file_format = Antelope
innodb_file_format_max = Antelope
innodb_large_prefix = OFF
innodb_purge_threads = 1
innodb_strict_mode = OFF
max_seeks_for_key = 4294967295
max_write_lock_count = 4294967295
myisam_max_sort_file_size = 2146435072
performance_schema_accounts_size = 100
performance_schema_hosts_size = 100
performance_schema_max_cond_instances = 6900
performance_schema_max_file_classes = 50
performance_schema_max_mutex_instances = 21000
performance_schema_max_rwlock_instances = 10800
performance_schema_max_table_handles = 4000
performance_schema_max_thread_instances = 2100
performance_schema_setup_actors_size = 100
performance_schema_setup_objects_size = 100
performance_schema_users_size = 100
sync_binlog = 0
innodb_buffer_pool_size = 8M
innodb_log_buffer_size = 1M

上面的配置我是参考我本地的5.6.25配置修改的,因为我发现我本地的这个版本占用内存非常小。当然在windows上和linux上或许是有区别的。修改完之后mysql内存占用率下降到了26%左右,也就是占用260兆左右,现在我的剩余内存能保持在300兆左右了。

也是经过这个事情我才发现安装在linux上的mysql要比在windows上更吃内存,起初我以为是阿里云服务器的原因,查看了一下其他linux上的mysql占用内存情况也都在600兆左右,只不过其他服务器内存配置都挺高所以感觉不出来。

顺便说一下,我的版本是64位5.7.9,应该是发文此刻官网公布的最新版本。如果你也遇到了相同的问题,修改的时候需要参考你的具体版本,因为每个版本的变量名称都不尽相同,所以很难保证你将上述代码贴到自己配置文件中就一定能跑起来。如果遇到问题请查看mysql的日志文件/var/log/mysqld.log,里面的错误记录如[ERROR] unknown variable 'have_crypt=NO',这就表示你的版本没有have_crypt这个变量,删掉即可。

说明:观察了一两天内存又升上来了,现在又到五百多兆了,我会继续寻找办法,已解决的朋友请留言说明。


除非注明,文章均为草根java原创,转载请注明本文地址: https://www.caogenjava.com/detail/69.html

上一篇:Linux上安全软件导致出现cpio: open 失败 - 没有那个文件或目录        下一篇:Linux上删除乱码文件之方法
网友评论,共0 发表评论
昵称:
评论:
验证码: 刷新验证码