mysql 内存狂吃内存 怎么办

在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
因为有一个业务设计到批量生成记录,一次性生成10w条内容(内容大部分相同,有的字段需要生成随机码),需要怎么处理?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
那些说用异步,循环什么,个人觉得不合理.
10w条数据啊,你就算内存够大,数据存进数据库里也会占用很多时间(IO流),甚至如果事务提交没处理好数据库也会占用内存.
直接在数据库里直接生成数据才是最快的办法.自己生成一张id表(只存id一个字段),记录10w条(0-10w)mysql做法:
insert into table t
select i.id, concat('名字', i.id) name,
concat('随机生成码7-12:',FLOOR(7 + (RAND() * 6))) rand,
ifnull(a.nickname, 'No nickname') nickname,
uuid() descript, --随机字符串
from_unixtime(unix_timestamp("00")+FLOOR((RAND()*60*60*24*365)))
--2017年中随机日期
from table_id i
left join table_account a on a.id=FLOOR((RAND()*12)) --如果数据来源另外一些表
where i.id & 1000
--如果只要生成1000条
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
组装sql语句,一次性提交,而非每次foreach都去提交sql插入数据
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
1.假如生成的數據用鍊式結構保存,建議優化數據結構,如假如大部分數據相同可以用鍵值保存相同數據,跟住用子鍵值保存不同的數據(即求同存異)如array(0=&array('data'=&array('name'=&'t','age'=&'14),'key'=&array('1','2','3','4')));foreach($array as $val) {
foreach($val['key']=&$kval) {
var_dump($kval);
var_dump($val);
2.一次性保存10條數據,對mysql服務器壓力加重,建議優化insert代碼,如insert into table values('t','a',1),('t','a',2)
3.建議開啟事務,定量提交數據
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
组装sql语句,然后用命令导入。可以搞个shell 脚本
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
实在不愿意分批处理,ini_set('’memory_limit', '256M'); 一下?或者你服务器内存不吃紧的话设成 512M
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:最近把MySQL升级到了5.6版本,无意中在任务管理器发现MySQL内存占用达到400+M,这是怎么回事呢?以前的版本可没有遇到过这种情况啊。开始的时候还以为是缓存了某个数据量较大的表的数据。于是重启MySQL服务,但结果出乎意料,MySQL服务一起启动,内存就又飙升到400+M。心想,这肯定不是缓存的那个表数据的问题了。接下来就是寻找解决MySQL 5.6 内存占用过高这个问题的解决方案了。
经过实验测试,修改一下my.ini这个配置文件的配置选项是可以限制MySQL5.6内存占用过高这一问题的,具体修改选项如下:
performance_schema_max_table_instances=400
table_definition_cache=400
table_open_cache=256
你如果在my.ini这个文件没中找到以上配置选项,则追加到该文件中即可。
完成以上配置的修改,重启MySQL服务。这个MySQL的内存占用从修改前的400+M直接降到40+M。
再也不会担心MySQL占用内存过高的问题啦^_^
转载请注明: >>
电子邮箱(必填)为了装mysql环境测试,装上后发现启动后mysql占用了很大的虚拟内存,达8百多兆。网上搜索了一下,得到高人指点my.ini。再也没见再详细的了..只好打开my.ini逐行的啃,虽然英文差了点,不过多少M还是看得明的^-^
更改后如下:
innodb_buffer_pool_size=576M -&256M InnoDB引擎缓冲区占了大头,首要就是拿它开刀
query_cache_size=100M&&&&&&&&&&-&16M&查询缓存
tmp_table_size=102M&&&&&&&&&&&&&&&&-&64M&临时表大小
key_buffer_size=256m&&&&&&&&&&&&&&&&-&32M
重启mysql服务后,虚拟内存降到200以下.
另外mysql安装目录下有几个文件:my-huge.ini&、my-large.ini、my-medium.ini...这几个是根据内存大小作的建议配置,新手在设置的时候也可以参考一下。
2G内存的MYSQL数据库服务器&my.ini优化&(my.ini)
2G内存,针对站少,优质型的设置,试验特:
table_cache=1024&物理内存越大,设置就越大.默认为2402,调到512-1024最佳
innodb_additional_mem_pool_size=8M&&&默认为2M
innodb_flush_log_at_trx_commit=0&等到innodb_log_buffer_size列队满后再统一储存,默认为1
innodb_log_buffer_size=4M&&&&&&&&&&默认为1M
innodb_thread_concurrency=8&&&&&&&你的服务器CPU有几个就设置为几,默认为8
key_buffer_size=256M&&&&&&&&&&&&&&&&&&&默认为218&&&&&&&调到128最佳
tmp_table_size=64M&&&&&&&&&&&&&&&&&&&默认为16M&&&&&&&&调到64-256最挂
read_buffer_size=4M&&&&&&&&&&&&&&&&&&&默认为64K
read_rnd_buffer_size=16M&&&&&&&&&&默认为256K
sort_buffer_size=32M&&&&&&&&&&&&&&&&&&&默认为256K
max_connections=1024&&&&&&&&&&&&&&&&&默认为1210
table_cache=512或1024
innodb_additional_mem_pool_size=2M
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=1M
innodb_thread_concurrency=8&&&&&&&你的服务器CPU有几个就设置为几,默认为8
key_buffer_size=128M
tmp_table_size=128M
read_buffer_size=64K或128K
read_rnd_buffer_size=256K
sort_buffer_size=512K
max_connections=1024&&&&&&
table_cache=512或1024
innodb_additional_mem_pool_size=8M&
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=4M&&&&&&
innodb_thread_concurrency=8&&&&&&
key_buffer_size=128M&&&&&&&&&&&&&&&&&&
tmp_table_size=128M&&&&&&&&&
read_buffer_size=4M&&&&&&&&&&&&&&&&&&
read_rnd_buffer_size=16M&&&&&&
sort_buffer_size=32M&&&&&&&&&&&&&&&&&&
max_connections=1024&&&&&&
table_cache=512
innodb_additional_mem_pool_size=8M&
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=4M&&&&&&
innodb_thread_concurrency=8&&&&&&
key_buffer_size=128M&&&&&&&&&&&&&&&&&&
tmp_table_size=128M&&&&&&&&&
read_buffer_size=4M&&&&&&&&&&&&&&&&&&&
read_rnd_buffer_size=16M&&&&&&
sort_buffer_size=32M&&&&&&&&&&&&&&&&&&
max_connections=1024
&&&&&&&&&&
经过测试.没有特殊情况,最好还是用默认的.
2G内存,针对站多,抗压型的设置,最佳:
table_cache=1024&物理内存越大,设置就越大.默认为2402,调到512-1024最佳
innodb_additional_mem_pool_size=4M&&&默认为2M
innodb_flush_log_at_trx_commit=1
(设置为0就是等到innodb_log_buffer_size列队满后再统一储存,默认为1)
innodb_log_buffer_size=2M&&&&&&&&&&&&&默认为1M
innodb_thread_concurrency=8&&&&&&&你的服务器CPU有几个就设置为几,建议用默认一般为8
key_buffer_size=256M&&&&&&&&&&&&&&&&&&&&&&&默认为218&&&&&&&调到128最佳
tmp_table_size=64M&&&&&&&&&&&&&&&&&&&&&&默认为16M&&&&&&&&调到64-256最挂
read_buffer_size=4M&&&&&&&&&&&&&&&&&&&&&&&默认为64K
read_rnd_buffer_size=16M&&&&&&&&&&&&&&默认为256K
sort_buffer_size=32M&&&&&&&&&&&&&&&&&&&默认为256K
max_connections=1024&&&&&&&&&&&&&&&&&默认为1210
thread_cache_size=120&&&&&&&&&&&&&默认为60
query_cache_size=64M
优化mysql数据库性能的十个参数
(1)、max_connections:
允许的同时客户的数量。增加该值增加&mysqld&要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到&too many connections&错误。&默认数值是100,我把它改为1024&。
(2)、record_buffer:
每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是k),我把它改为m)
(3)、key_buffer_size:
索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是m),我的mysql主机有2gb内存,所以我把它改为&0mb)。
4)、back_log:
要求&mysql&能有的连接数量。当主要mysql线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。
back_log&值指出在mysql暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的tcp/ip连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。试图设定back_log高于你的操作系统的限制将是无效的。
当你观察你的主机进程列表,发现大量&264084 | unauthenticated user | xxx.xxx.xxx.xxx | null | connect | null | login | null的待连接进程时,就要加大&back_log&的值了。默认数值是50,我把它改为500。
(5)、interactive_timeout:
服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对&mysql_real_connect()使用client_interactive&选项的客户。&默认数值是28800,我把它改为7200。
(6)、sort_buffer:
每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速order by或group by操作。默认数值是m),我把它改为&m)。
(7)、table_cache:
为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。mysql对每个唯一打开的表需要2个文件描述符。默认数值是64,我把它改为512。
(8)、thread_cache_size:
可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。通过比较&connections&和&threads_created&状态的变量,可以看到这个变量的作用。我把它设置为&80。
(9)mysql的搜索功能
用mysql进行搜索,目的是能不分大小写,又能用中文进行搜索
只需起动mysqld时指定&--default-character-set=gb2312
(10)、wait_timeout:
服务器在关闭它之前在一个连接上等待行动的秒数。&默认数值是28800,我把它改为7200。
注:参数的调整可以通过修改&/f&文件并重启&mysql&实现。这是一个比较谨慎的工作,上面的结果也仅仅是我的一些看法,你可以根据你自己主机的硬件情况(特别是内存大小)进一步修改。
阅读(...) 评论()您还没有登录,快捷通道只有在登录后才能使用。 还没有帐号? 赶紧
MySQL占用内存过多?老被kill掉。
在线时间32小时
本帖被 wuzei 从 弹性计算 移动到本区()
实在没有办法了,发帖求助一下。& & &服务器是centos 64 位 1G ram。& & &环境是阿里的一件弄上去的。mysql 版本是& & &引用 mysql&&Ver 14.14 Distrib 5.6.15, for linux-glibc2.5 (x86_64) using&&EditLine wrapper& &mysql 最后的日志:& &引用
04:25:18 3873 [Note] InnoDB: Database was not shutdown normally!& 04:25:18 3873 [Note] InnoDB: Starting crash recovery.& 04:25:18 3873 [Note] InnoDB: Reading tablespace information from the .ibd files...& 04:25:18 3873 [Note] InnoDB: Restoring possible half-written data pages & 04:25:18 3873 [Note] InnoDB: from the doublewrite buffer...&InnoDB: Last MySQL binlog file position 0 , file name ./mysql-bin.000003& 04:25:19 3873 [Note] InnoDB: 128 rollback segment(s) are active.& 04:25:19 3873 [Note] InnoDB: Waiting for purge to start& 04:25:19 3873 [Note] InnoDB: 5.6.15 log sequence number & 04:25:19 3873 [Note] Recovering after a crash using mysql-bin& 04:25:19 3873 [Note] Starting crash recovery...& 04:25:19 3873 [Note] Crash recovery finished.& 04:25:20 3873 [Note] Server hostname (bind-address): '*'; port: 3306& 04:25:20 3873 [Note] IPv6 is available.& 04:25:20 3873 [Note]&& - '::' resolves to '::';& 04:25:20 3873 [Note] Server socket created on IP: '::'.& 04:25:20 3873 [Note] Event Scheduler: Loaded 0 events& 04:25:20 3873 [Note] /alidata/server/mysql/bin/mysqld: ready for connections.&Version: '5.6.15-log'&&socket: '/tmp/mysql.sock'&&port: 3306&&MySQL Community Server (GPL)& &系统不断kill 掉进程:&&引用 Apr 10 04:28:03 AY473d5eZ kernel: mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0&Apr 10 04:28:03 AY473d5eZ kernel: mysqld cpuset=/ mems_allowed=0&Apr 10 04:28:03 AY473d5eZ kernel: Pid: 4767, comm: mysqld Not tainted 2.6.32-358.6.2.el6.x86_64 #1&Apr 10 04:28:03 AY473d5eZ kernel: [ 4291]&&&& 0&&4291&&&&26569&&&&&& 78&& 0&&&&&& 0&&&&&&&&&&&& 0 mysqld_safe&Apr 10 04:28:03 AY473d5eZ kernel: [ 4731]&& 501&&4731&& 255342&&&&27533&& 0&&&&&& 0&&&&&&&&&&&& 0 mysqld&Apr 10 04:28:03 AY473d5eZ kernel: Out of memory: Kill process 4731 (mysqld) score 108 or sacrifice child&Apr 10 04:28:03 AY473d5eZ kernel: Killed process 4731, UID 501, (mysqld) total-vm:1021368kB, anon-rss:109884kB, file-rss:248kB&Apr 10 04:28:21 AY473d5eZ kernel: [ 4291]&&&& 0&&4291&&&&26569&&&&&& 79&& 0&&&&&& 0&&&&&&&&&&&& 0 mysqld_safe&Apr 10 04:28:21 AY473d5eZ kernel: [ 4787]&& 501&&4787&& 255666&&&&28296&& 0&&&&&& 0&&&&&&&&&&&& 0 mysqld&Apr 10 04:28:21 AY473d5eZ kernel: Out of memory: Kill process 4787 (mysqld) score 111 or sacrifice child&Apr 10 04:28:21 AY473d5eZ kernel: Killed process 4787, UID 501, (mysqld) total-vm:1022664kB, anon-rss:112904kB, file-rss:280kB&&&&mysql 的配置文件是安装程序默认的,没动过,不是很会,Google 了不少资料,还是不敢乱调整。&&引用 [client]&port&&&&&&&&&&&&= 3306&socket&&&&&&&&&&= /tmp/mysql.sock&[mysqld]&port&&&&&&&&&&&&= 3306&socket&&&&&&&&&&= /tmp/mysql.sock&skip-external-locking&key_buffer_size = 16M&max_allowed_packet = 1M&table_open_cache = 64&sort_buffer_size = 512K&net_buffer_length = 8K&read_buffer_size = 256K&read_rnd_buffer_size = 512K&myisam_sort_buffer_size = 8M& &log-bin=mysql-bin&binlog_format=mixed&server-id&&&&&& = 1& &sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES& &[mysqldump]&quick&max_allowed_packet = 16M& &[mysql]&no-auto-rehash& &[myisamchk]&key_buffer_size = 20M&sort_buffer_size = 20M&read_buffer = 2M&write_buffer = 2M& &[mysqlhotcopy]&interactive-timeout&&重新启动mysql 后的free -m :&&引用 &&&&&&&&&&&& total&&&&&& used&&&&&& free&&&& shared&&&&buffers&&&& cached&Mem:&&&&&&&&&& 994&&&&&&&&940&&&&&&&& 54&&&&&&&&&&0&&&&&&&&&&0&&&&&&&& 11&-/+ buffers/cache:&&&&&&&&928&&&&&&&& 66&Swap: &&然后这个是top:&&引用 top - 04:31:32 up 38 min,&&2 users,&&load average: 3.37, 3.67, 2.63&Tasks: 110 total,&& 1 running, 109 sleeping,&& 0 stopped,&& 0 zombie&Cpu(s):&&0.6%us,&&1.6%sy,&&0.0%ni,&&0.0%id, 97.5%wa,&&0.3%hi,&&0.0%si,&&0.0%st&Mem:&& 1018804k total,&& 969680k used,&&&&49124k free,&&&&&&324k buffers&Swap:&&&&&&&&0k total,&&&&&&&&0k used,&&&&&&&&0k free,&&&& 5468k cached& &&&PID USER&&&&&&PR&&NI&&VIRT&&RES&&SHR S %CPU %MEM&&&&TIME+&&COMMAND&&&&&&&&&& & 1289 www&&&&&& 20&& 0&&223m&&25m&&872 D&&0.6&&2.6&& 0:16.87 php-fpm&&&&&&&&&& &&& 30 root&&&&&&20&& 0&&&& 0&&&&0&&&&0 D&&0.3&&0.0&& 0:03.35 kswapd0&&&&&&&&&& & 1365 root&&&&&&20&& 0&&641m
S&&0.3&&0.3&& 0:00.85 aegis_cli&&&&&&&& & 5315 mysql&&&& 20&& 0&&804m 105m&&548 S&&0.3 10.6&& 0:00.38 mysqld&&&&&&&&&&&&&&&&&1 root&&&&&&20&& 0 1&&&&4 S&&0.0&&0.0&& 0:00.73 init&&&&&&&&&&&&&&&&&&&2 root&&&&&&20&& 0&&&& 0&&&&0&&&&0 S&&0.0&&0.0&& 0:00.00 kthreadd&&&&&&&&&&&&&&&3 root&&&&&&RT&& 0&&&& 0&&&&0&&&&0 S&&0.0&&0.0&& 0:00.00 migration/0&&&&&& &&&&&4 root&&&&&&20&& 0&&&& 0&&&&0&&&&0 S&&0.0&&0.0&& 0:00.03 ksoftirqd/0&&&&&& &&&&&5 root&&&&&&RT&& 0&&&& 0&&&&0&&&&0 S&&0.0&&0.0&& 0:00.00 migration/0&&&&&& &&&&&6 root&&&&&&RT&& 0&&&& 0&&&&0&&&&0 S&&0.0&&0.0&& 0:00.00 watchdog/0&&&&&&&&&&&&&7 root&&&&&&20&& 0&&&& 0&&&&0&&&&0 S&&0.0&&0.0&& 0:00.18 events/0&&&&&&&&&&&&&&&8 root&&&&&&20&& 0&&&& 0&&&&0&&&&0 S&&0.0&&0.0&& 0:00.00 cgroup&&&&&&&&&&&&&&&&&9 root&&&&&&20&& 0&&&& 0&&&&0&&&&0 S&&0.0&&0.0&& 0:00.00 khelper&&&&&&&&&& &&& 10 root&&&&&&20&& 0&&&& 0&&&&0&&&&0 S&&0.0&&0.0&& 0:00.00 netns&&&&&&&&&&&& &&& 11 root&&&&&&20&& 0&&&& 0&&&&0&&&&0 S&&0.0&&0.0&& 0:00.00 async/mgr&&&&&&&& &&& 12 root&&&&&&20&& 0&&&& 0&&&&0&&&&0 S&&0.0&&0.0&& 0:00.00 pm&&&&&&&&&&&&&&&&& &&上面是可能又帮助的资料吗?哎,刚等备案通过了,转入阿里就遇到这么蛋疼的事情。睡不着...
在线时间41小时
ReMySQL占用内存过多?老被kill掉。
1G内存不应该会出现内存不足啊?楼主是不是安装了其他程序在启动运行?
在线时间64小时
ReMySQL占用内存过多?老被kill掉。
你的UPTIME就相当不正常,请简要说明一下,使用程序和PV等情况。
UID:44404
在线时间4064小时
内存OOM如果进程溢出的话,系统会杀掉某些进程释放内存,楼主还是要优化下mysql的配置文件,默认的配置可能不适合你的应用,可以网上搜索下相关mysql的优化教程。
在线时间1747小时
按这篇文章给你的主机添加SWAP交换空间(相当于WIN的虚拟内存)&&&阿里云官方甚至还开过帖不建议使用SWAP,你们当小P民们都是高富帅一整就是几十G内存的机器?&&如果还有问题,执行top命令的时候按shit+m,作用是把进程按内存占用大小从高到低排列,再截图发出来。
本人非阿里云员工,所有言论不代表阿里云公司观点。有偿提供:环境安装、配置、优化,数据迁移,安全加固,攻击防护,故障排除,长期代维等技术服务。
在线时间32小时
回4楼服务器之家的帖子
当晚发完帖子就接到电话了,这效率真夸张。。。& &最后还是直接升级内存到2G,然后就没出现过了。& & 引用 top - 14:00:10 up 6 days,&&3:39,&&1 user,&&load average: 1.25, 0.74, 0.89&Tasks: 104 total,&& 4 running, 100 sleeping,&& 0 stopped,&& 0 zombie&Cpu(s): 55.1%us,&&3.7%sy,&&0.0%ni, 40.9%id,&&0.0%wa,&&0.3%hi,&&0.0%si,&&0.0%st&Mem:&& 1920944k total,&&1473384k used,&& 447560k free,&& 126676k buffers&Swap:&&&&&&&&0k total,&&&&&&&&0k used,&&&&&&&&0k free,&& 264812k cached&&&&PID USER&&&&&&PR&&NI&&VIRT&&RES&&SHR S %CPU %MEM&&&&TIME+&&COMMAND&&&&&&&&&&&&& 8133 mysql&&&& 20&& 0 m 6156 S 12.3&&8.5&&69:54.38 mysqld&&&&&&&&&&&& &16993 www&&&&&& 20&& 0&&231m&&37m 4088 R&&6.7&&2.0&& 0:32.86 php-fpm&&&&&&&&&&&&&15826 www&&&&&& 20&& 0&&231m&&36m 3984 R&&6.7&&1.9&& 0:42.09 php-fpm&&&&&&&&&&&&&14223 www&&&&&& 20&& 0&&225m&&31m 4460 S&&0.0&&1.7&& 0:50.17 php-fpm&&&&&&&&&&&&& 6764 www&&&&&& 20&& 0&&225m&&31m 4208 S&&0.0&&1.7&& 1:35.63 php-fpm&&&&&&&&&&&&&14233 www&&&&&& 20&& 0&&225m&&31m 4004 S&&0.0&&1.7&& 0:51.16 php-fpm&&&&&&&&&&&&&15857 www&&&&&& 20&& 0&&224m&&30m 4204 S&&0.0&&1.6&& 0:38.24 php-fpm&&&&&&&&&&&&&15862 www&&&&&& 20&& 0&&221m&&27m 4728 S&&2.7&&1.5&& 0:39.13 php-fpm&&&&&&&&&&&&&14222 www&&&&&& 20&& 0&&221m&&27m 4648 S&&9.0&&1.5&& 0:50.55 php-fpm&&&&&&&&&&&&& 3149 www&&&&&& 20&& 0&&221m&&27m 4372 S&&0.0&&1.5&& 2:01.77 php-fpm&&&&&&&&&&&&&15828 www&&&&&& 20&& 0&&221m&&27m 4192 S&&0.0&&1.5&& 0:42.29 php-fpm&&&&&&&&&&&&&15823 www&&&&&& 20&& 0&&221m&&27m 4252 S&&0.0&&1.5&& 0:41.43 php-fpm&&&&&&&&&&&&&15822 www&&&&&& 20&& 0&&221m&&27m 4264 S&&0.0&&1.4&& 0:39.06 php-fpm&&&&&&&&&&&&& 1345 www&&&&&& 20&& 0 71044&&27m&&608 S&&0.0&&1.4&& 5:45.00 nginx&&&&&&&&&&&&&&&15816 www&&&&&& 20&& 0&&220m&&26m 4400 S&&0.0&&1.4&& 0:40.16 php-fpm&&&&&&&&&&&&&15846 www&&&&&& 20&& 0&&221m&&26m 3964 S&&0.0&&1.4&& 0:39.52 php-fpm&&&&&&&&&&&&&15860 www&&&&&& 20&& 0&&221m&&26m 3884 S&&0.0&&1.4&& 0:39.54 php-fpm&&&&&&&&&&&&&&引用 [root@localhost]# free -m&&&&&&&&&&&&& total&&&&&& used&&&&&& free&&&& shared&&&&buffers&&&& cached&Mem:&&&&&&&&&&1875&&&&&& 1431&&&&&&&&444&&&&&&&&&&0&&&&&&&&123&&&&&&&&258&-/+ buffers/cache:&&&&&& 1048&&&&&&&&827&Swap:&&&&&&&&&&&&0&&&&&&&&&&0&&&&&&&&&&0&&&
在线时间1747小时
看样子你的php-fpm进程开的太多了&&用这个命令看一下数量&ps aux | grep php-fpm | grep -v grep|grep -v master| wc -l&&&这个命令更直接些&wget -O -
本人非阿里云员工,所有言论不代表阿里云公司观点。有偿提供:环境安装、配置、优化,数据迁移,安全加固,攻击防护,故障排除,长期代维等技术服务。
在线时间8小时
ReMySQL占用内存过多?老被kill掉。
你应该加上2G的swap分区,再修改my.ini
在线时间10小时
我现在也同样这个问题,加了swp 64M ,mysql innodb buffer pool=32M 开了memcache ,结果运行1分钟就被杀掉,实在不知怎么办才好&也是1G的阿里云&
在线时间229小时
给你们一个1G内存的mysql优化过的配置文件吧,mysql 5.6系列的,自己按照自己的路径改改,在我机器上占内存大户是java &如果不是频繁操作数据库的站,数据量比较小,还是建议把Innodb引擎关闭,使用MyISAM引擎,这样资源占用会小的多,也稳定& & & '995')this.width='995';">& [mysqld]port= 3306character-set-server=utf8performance_schema_max_table_instances=200table_definition_cache=200table_open_cache=128innodb=OFFdefault-storage-engine=MYISAMdefault-tmp-storage-engine=MYISAMloose-innodb-trx=0 loose-innodb-locks=0 loose-innodb-lock-waits=0 loose-innodb-cmp=0 loose-innodb-cmp-per-index=0loose-innodb-cmp-per-index-reset=0loose-innodb-cmp-reset=0 loose-innodb-cmpmem=0 loose-innodb-cmpmem-reset=0 loose-innodb-buffer-page=0 loose-innodb-buffer-page-lru=0 loose-innodb-buffer-pool-stats=0 loose-innodb-metrics=0 loose-innodb-ft-default-stopword=0 loose-innodb-ft-inserted=0 loose-innodb-ft-deleted=0 loose-innodb-ft-being-deleted=0 loose-innodb-ft-config=0 loose-innodb-ft-index-cache=0 loose-innodb-ft-index-table=0 loose-innodb-sys-tables=0 loose-innodb-sys-tablestats=0 loose-innodb-sys-indexes=0 loose-innodb-sys-columns=0 loose-innodb-sys-fields=0 loose-innodb-sys-foreign=0 loose-innodb-sys-foreign-cols=0join_buffer_size = 64Msql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES& & & &[ 此帖被买醉在 18:08重新编辑 ]
在线时间316小时
回 5楼(风之鱼) 的帖子
内存不够出问题了
自己喜欢的东西就不要问别人好不好看Q:
私人收费视频教程:/apps.php?spm=0.0.0.0.bPivJY&q=article&uid=3081给我投票/read/305511.html?spm=.3.13.lmSnT4
在线时间0小时
ReMySQL占用内存过多?老被kill掉。
看你的主机访问量,如果不是很高,把你的php-fpm进程数调小一点,另外pm.max_requests值调低,应该可以解决,不需要加内存![ 此帖被lionel-12-26 10:27重新编辑 ]
在线时间0小时
&发表于: 07-09
回 9楼买醉的帖子
我5.7的改后,还是很占内存
访问内容超出本站范围,不能确定是否安全
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
您目前还是游客,请
验证问题: 阿里云官网域名是什么? 正确答案:
&回复后跳转到最后一页mysql5.6启动占用内存很大的解决方法 - musings - 博客园
vps的内存为512M,安装好nginx,php等启动起来,mysql死活启动不起来看了日志只看到对应pid被结束了,后跟踪看发现是内存不足被
调整my.cnf 参数,重新配置(系统默认配置太高直接占用400M内存,小玩家玩不起呢)即可
performance_schema_max_table_instances=200
table_definition_cache=200
table_open_cache=128
下面附一个相关的my.cnf配置文件的说明
port = 3306
socket = /tmp/mysql.sock
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /data/mysql
pid-file = /data/mysql/mysql.pid
user = mysql
bind-address = 0.0.0.0
server-id = 1 #表示是本机的序号为1,一般来讲就是master的意思
skip-name-resolve
# 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,
# 则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求
#skip-networking
back_log = 600
# MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,
# 然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。
# 如果期望在一个短时间内有很多连接,你需要增加它。也就是说,如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,
# 以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
# 另外,这值(back_log)限于您的操作系统对到来的TCP/IP连接的侦听队列的大小。
# 你的操作系统在这个队列大小上有它自己的限制(可以检查你的OS文档找出这个变量的最大值),试图设定back_log高于你的操作系统的限制将是无效的。
max_connections = 1000
# MySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接数量,以定夺该值的大小。
max_connect_errors = 6000
# 对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST。
open_files_limit = 65535
# MySQL打开的文件描述符限制,默认最小1024;当open_files_limit没有被配置的时候,比较max_connections*5和ulimit -n的值,哪个大用哪个,
# 当open_file_limit被配置的时候,比较open_files_limit和max_connections*5的值,哪个大用哪个。
table_open_cache = 128
# MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64
# 假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目);
# 当把table_open_cache设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上
max_allowed_packet = 4M
# 接受的数据包大小;增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出长查询或MySQLd必须返回大的结果行时MySQLd才会分配更多内存。
# 该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。
binlog_cache_size = 1M
# 一个事务,在没有提交的时候,产生的日志,记录到Cache中;等到事务提交需要提交的时候,则把日志持久化到磁盘。默认binlog_cache_size大小32K
max_heap_table_size = 8M
# 定义了用户可以创建的内存表(memory table)的大小。这个值用来计算内存表的最大行数值。这个变量支持动态改变
tmp_table_size = 16M
# MySQL的heap(堆积)表缓冲大小。所有联合在一个DML指令内完成,并且大多数联合甚至可以不用临时表即可以完成。
# 大多数临时表是基于内存的(HEAP)表。具有大的记录长度的临时表 (所有列的长度的和)或包含BLOB列的表存储在硬盘上。
# 如果某个内部heap(堆积)表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。还可以通过设置tmp_table_size选项来增加临时表的大小。也就是说,如果调高该值,MySQL同时将增加heap表的大小,可达到提高联接查询速度的效果
read_buffer_size = 2M
# MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。
# 如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能
read_rnd_buffer_size = 8M
# MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,
# MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大
sort_buffer_size = 8M
# MySQL执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。
# 如果不能,可以尝试增加sort_buffer_size变量的大小
join_buffer_size = 8M
# 联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享
thread_cache_size = 8
# 这个值(默认8)表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,
# 如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,
# 增加这个值可以改善系统性能.通过比较Connections和Threads_created状态的变量,可以看到这个变量的作用。(&&表示要调整的值)
# 根据物理内存设置规则如下:
query_cache_size = 8M
#MySQL的查询缓冲大小(从4.0.1开始,MySQL提供了查询缓冲机制)使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中,
# 今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。
# 通过检查状态值'Qcache_%',可以知道query_cache_size设置是否合理:如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,
# 如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;如果Qcache_hits的值不大,则表明你的查询重复率很低,
# 这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲
query_cache_limit = 2M
#指定单个查询能够使用的缓冲区大小,默认1M
key_buffer_size = 4M
#指定用于索引的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,
# 系统将开始换页并且真的变慢了。对于内存在4GB左右的服务器该参数可设置为384M或512M。通过检查状态值Key_read_requests和Key_reads,
# 可以知道key_buffer_size设置是否合理。比例key_reads/key_read_requests应该尽可能的低,
# 至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE 'key_read%'获得)。注意:该参数值设置的过大反而会是服务器整体效率降低
ft_min_word_len = 4
# 分词词汇最小长度,默认4
transaction_isolation = REPEATABLE-READ
# MySQL支持4种事务隔离级别,他们分别是:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
# 如没有指定,MySQL默认采用的是REPEATABLE-READ,ORACLE默认的是READ-COMMITTED
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 30 #超过30天的binlog删除
log_error = /data/mysql/mysql-error.log #错误日志路径
slow_query_log = 1
long_query_time = 1 #慢查询时间 超过1秒则为慢查询
slow_query_log_file = /data/mysql/mysql-slow.log
performance_schema = 0
explicit_defaults_for_timestamp
#lower_case_table_names = 1 #不区分大小写
skip-external-locking #MySQL选项以避免外部锁定。该选项默认开启
default-storage-engine = InnoDB #默认存储引擎
innodb_file_per_table = 1
# InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间
# 独立表空间优点:
# 1.每个表都有自已独立的表空间。
# 2.每个表的数据和索引都会存在自已的表空间中。
# 3.可以实现单表在不同的数据库中移动。
# 4.空间可以回收(除drop table操作处,表空不能自已回收)
# 单表增加过大,如超过100G
# 共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整:innodb_open_files
innodb_open_files = 500
# 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300
innodb_buffer_pool_size = 64M
# InnoDB使用一个缓冲池来保存索引和原始数据, 不像MyISAM.
# 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.
# 在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80%
# 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.
# 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制,
# 所以不要设置的太高.
innodb_write_io_threads = 4
innodb_read_io_threads = 4
# innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU 核数来更改,默认是4
# 注:这两个参数不支持动态改变,需要把该参数加入到my.cnf里,修改完后重启MySQL服务,允许值的范围从 1-64
innodb_thread_concurrency = 0
# 默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量
innodb_purge_threads = 1
# InnoDB中的清除操作是一类定期回收无用数据的操作。在之前的几个版本中,清除操作是主线程的一部分,这意味着运行时它可能会堵塞其它的数据库操作。
# 从MySQL5.5.X版本开始,该操作运行于独立的线程中,并支持更多的并发数。用户可通过设置innodb_purge_threads配置参数来选择清除操作是否使用单
# 独线程,默认情况下参数设置为0(不使用单独线程),设置为 1 时表示使用单独的清除线程。建议为1
innodb_flush_log_at_trx_commit = 2
# 0:如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作(执行是由mysql的master thread线程来执行的。
# 主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。不论事务是否已经提交)默认的日志文件是ib_logfile0,ib_logfile1
# 1:当设为默认值1的时候,每次提交事务的时候,都会将log buffer刷写到日志。
# 2:如果设为2,每次提交事务都会写日志,但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。
# 每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有 缓存的,所以这个写入并不能保证数据已经写入到物理磁盘
# 默认值1是为了保证完整的ACID。当然,你可以将这个配置项设为1以外的值来换取更高的性能,但是在系统崩溃的时候,你将会丢失1秒的数据。
# 设为0的话,mysqld进程崩溃的时候,就会丢失最后1秒的事务。设为2,只有在操作系统崩溃或者断电的时候才会丢失最后1秒的数据。InnoDB在做恢复的时候会忽略这个值。
# 设为1当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能
innodb_log_buffer_size = 2M
# 此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据。MySQL开发人员建议设置为1-8M之间
innodb_log_file_size = 32M
# 此参数确定数据日志文件的大小,更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间
innodb_log_files_in_group = 3
# 为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3
innodb_max_dirty_pages_pct = 90
# innodb主线程刷新缓存池中的数据,使脏数据比例小于90%
innodb_lock_wait_timeout = 120
# InnoDB事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB在它自己的锁定表中自动检测事务死锁并且回滚事务。InnoDB用LOCK TABLES语句注意到锁定设置。默认值是50秒
bulk_insert_buffer_size = 8M
# 批量插入缓存大小, 这个参数是针对MyISAM存储引擎来说的。适用于在一次性插入100-1000+条记录时, 提高效率。默认值是8M。可以针对数据量的大小,翻倍增加。
myisam_sort_buffer_size = 8M
# MyISAM设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配的缓冲区
myisam_max_sort_file_size = 10G
# 如果临时文件会变得超过索引,不要使用快速排序索引方法来创建一个索引。注释:这个参数以字节的形式给出
myisam_repair_threads = 1
# 如果该值大于1,在Repair by sorting过程中并行创建MyISAM表索引(每个索引在自己的线程内)
interactive_timeout = 28800
# 服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。默认值:28800秒(8小时)
wait_timeout = 28800
# 服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,
# 取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。参数默认值:28800秒(8小时)
# MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL Server处理完相应的操作后,
# 应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白消耗内存,而且如果连接一直在累加而不断开,
# 最终肯定会达到MySQL Server的连接上限数,这会报'too many connections'的错误。对于wait_timeout的值设定,应该根据系统的运行情况来判断。
# 在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态,如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大,
# 可以进行适当的调整小些。要同时设置interactive_timeout和wait_timeout才会生效。
[mysqldump]
max_allowed_packet = 16M #服务器发送和接受的最大包长度
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M
阅读(...) 评论()

我要回帖

更多关于 mysql 内存 的文章

 

随机推荐