大牛?无他,唯手熟尔!

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

摘要:本站刚换到阿里云服务器上,使用的是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这个变量,删掉即可。

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


2019-11-22补充:

1.如果你用的是云服务器,加内存更直接,比如从1G升为2G,价钱就高了一点,还是比较划算的。

2.如果你不想加内存,可以采用云数据库,自己的服务器不安装了,直接把内存省下来,这里推荐腾讯云数据库,1年169元(相对来说已经很便宜了),大家可参考我这篇文章进行购买:《推荐一个个人用的便宜云数据库》

双11云服务器热购推广(腾讯云):2核+4G内存+3M带宽=688元/3年(仅限新用户)

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

上一篇:拒绝广告,拒绝FF新推荐,安装原版Flash        下一篇:checkStyle版本太高与xml不兼容导致无法正常扫描
网友评论,共0 发表评论
昵称:
评论:
验证码: 刷新验证码
双11云服务器热购
    购买建议:带宽不用太高了,1M就够用,多考虑内存。