mysql访问量稍大,就会内存占满而停止,请帮忙分析一下原因

php2009 2012-12-06 08:22:11
是一个商城系统,ZENCART的

点击量每天也有几十万次吧

现在是我的独立服务器基本上无法连续运行24小时过,
一般连续运行不到20小时,就会出现数据库停止不运行的情况。
这时当然就无法连接数据库了。

但是其它方面没问题的,象APACHE,PHP都是能正常运行的,而且页面还可以打开,就是MYSQL停止不运行了,这个时候只有重启服务器才可以继续运行。

所以我感觉是MYSQL内存占用过大,所以MYSQL停止了

象这种问题我该如何来解决呢?总不能不用MYSQL了吧

max connections 这个值目前设置的是175
interactive timeout这个值是 28800
wait timeout 这个值是 2


请问跟上面三个值有关系吗?另外就是,是不是max connections 我设置小一点,比如10,当达到这个值后,MYSQL进程就会重新启动呢?因为现在的服务器一停,就数据库几小时连接不上,除非重启服务器。
如果想让MYSQL服务自动重启的话, max connections 是不是要设置为 10 ,这样达到这个值的时候MYSQL服务是否会自动重启呢?
...全文
1802 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
过去的我 2013-07-18
  • 打赏
  • 举报
回复
贴my.cnf 还有内存实际有多大?
hwwlove 2013-07-16
  • 打赏
  • 举报
回复
很少遇到这样的问题。。可以这样。通过程序和数据库对接上面做优化。。。
tianyichuanqi 2013-07-11
  • 打赏
  • 举报
回复
额。。。空间商大多会那么说。 最好是做程序上的优化。
ACMAIN_CHM 2012-12-15
  • 打赏
  • 举报
回复
引用 12 楼 php2009 的回复:
空间商又帮我查了下原因,并不是因为MYSQL运算量大,造成的内存吃紧 而是我的网站流量太大,API调用量太占内存,所以造成程序进程内存点用过大 这样会影响到MYSQL,所以MYSQL就停了,反正不管是哪个进程耗内存,MYSQL最后都会因为内存不足而停止, 至少现在MYSQL停止的原因找到了,那就是内存不够用,也就是MEMERY USED占的百分比太大了。 ……
看来还是程序上的原因。
php2009 2012-12-14
  • 打赏
  • 举报
回复
空间商又帮我查了下原因,并不是因为MYSQL运算量大,造成的内存吃紧 而是我的网站流量太大,API调用量太占内存,所以造成程序进程内存点用过大 这样会影响到MYSQL,所以MYSQL就停了,反正不管是哪个进程耗内存,MYSQL最后都会因为内存不足而停止, 至少现在MYSQL停止的原因找到了,那就是内存不够用,也就是MEMERY USED占的百分比太大了。 所以现在我的优化重点要放在如何减少内存占用上
php2009 2012-12-10
  • 打赏
  • 举报
回复
引用 3 楼 iihero 的回复:
连接数175,有点小。 另外,由于是PHP的,可能经常有死连接。你可以写个脚本,定期杀掉那些死连接。 网上有很多例子。
多谢,实际上我的站最大并发也没超过150的,所以175暂时没问题 现在问题是内存问题,一般并发连接达到130或120的话,内存使用率会达到80%,然后数据库就停止了。 只有重启服务器,才能继续正常运行。 但这样过了十来个小时,内存慢慢又使用达到80%了,所以就是这个问题。 大家能说一下各自的服务器内存使用,一般保持在百分之多少吗?
php2009 2012-12-10
  • 打赏
  • 举报
回复
我又仔细分析了一下,最终原因是跟内存使用百分比有关的 如果我的服务器内存使用达到 80% 的时候,基本上就会出现数据库连接不上 如果内存使用达到 90% ,那服务器就会打不开了 所以最终原因,还是内存占用过大的问题 但我不知道如何来解决这个问题,上面这位版主说的有很多死连接,这应该是一个原因,不知道怎样才能把这些死连接进程全杀掉,有这样的PHP脚本吗,还是服务器上哪里设置? 我做了优化,把很多MYSQL查询的地方全改为数组来实现,比如有8000个产品,每个对应一个不同的产品价格,以前是每次都从数据库通过产品ID来查这个产品价格。 现在我改为将这8000个产品定义为数组,KEY就是产品ID,VALUE就是产品价格,然后每次调用产品时,直接使用这个数组的值,就可以得到产品价格了,这样就省去了调用数据库。 难道这样做不对吗?因为大家所熟悉的一些把数据缓存到内存中的做法,都是这样的吧。 省去了从硬盘拿数据,又省去了调用MYSQL进程。 便做了数组定义内存中以后,服务器死机更快了,我真不知道该如何去优化了。
iihero_ 2012-12-10
  • 打赏
  • 举报
回复
引用 8 楼 php2009 的回复:
引用 3 楼 iihero 的回复:连接数175,有点小。 另外,由于是PHP的,可能经常有死连接。你可以写个脚本,定期杀掉那些死连接。 网上有很多例子。 多谢,实际上我的站最大并发也没超过150的,所以175暂时没问题 现在问题是内存问题,一般并发连接达到130或120的话,内存使用率会达到80%,然后数据库就停止了。 只有重启服务器,才能继续正常运行。 ……
show variables like '%memory%' show variables like '%cache%' 看看都有哪些值, 调整一下
php2009 2012-12-10
  • 打赏
  • 举报
回复
慢查询我不太懂是什么 但我写的数据查询,基本都是简单查询,没什么很复杂的 别的查询就是ZENCART的标准查询,应该没什么BUG 因为我要大量用API拿产品数据,空间商说跟用 file_get_contents和CURL 大量拿数据也有关
ByLia 2012-12-10
  • 打赏
  • 举报
回复
查看下是不是有慢查询, 慢查询会造成数据不能及时处理,会开启新进程,处理的多了就卡死了
Rotel-刘志东 2012-12-08
  • 打赏
  • 举报
回复
具体查看mysql的错误日志和二进制日志从中分析一下什么原因造成 mysql当掉原因。是调整mysql配置参数,还是调整mysql的架构。
Rotel-刘志东 2012-12-08
  • 打赏
  • 举报
回复
具体查看mysql的错误日志和二进制日志从中分析一下什么原因造成 mysql当掉原因。是调整mysql配置参数,还是调整mysql的
Rotel-刘志东 2012-12-08
  • 打赏
  • 举报
回复
mysql当掉了,访问的连接数过大造成的。查看mysql连接数, show processlists;
iihero_ 2012-12-08
  • 打赏
  • 举报
回复
连接数175,有点小。 另外,由于是PHP的,可能经常有死连接。你可以写个脚本,定期杀掉那些死连接。 网上有很多例子。
bonlog 2012-12-07
  • 打赏
  • 举报
回复
此类问题,你要把出问题锁定在哪个页面中, 再查看执行的那条语句,把语句单独在mysql执行。找出原因,所以一般不要去改到apache。 原因最多的是while,for,进入死循环所致。
php2009 2012-12-07
  • 打赏
  • 举报
回复
跟死循环没任何关系 程序都运行一年多了,没啥问题 主要是访问量一大,MYSQL会停掉 不知道MYSQL到底能承受多大压力,感觉压力一大,最先出问题的就是MYSQL 我现在准备用缓存代替MYSQL,但这样改动也非常多,这样MYSQL等于是很少用了 实际上我现在还是不知道是什么原因导致,难道MYSQL就这样脆弱?

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧