端午在即,难忘的经历——记一次php单次任务处理对内存超大需求的解决

来源:互联网 发布:linux怎么修改文件权限 编辑:程序博客网 时间:2024/06/05 03:28

MYSQL5,有个数据表,4千9百多万笔记录,怀疑有冗余数据.......

写了个group by + having语句去检查,好家伙,跑了近半个小时(group by字段有索引):的确好多重复数据.....

怎么办?

手工比对删?岂非要死人的节奏??

.....踱步数个来回,决定祭出擅长的PHP,写个脚本,后台执行检查自动删去.......

......逻辑构思完毕......

......代码敲击完毕....

......nohup执行 + tail -f nohup.out.....

半天没任何鸟log信息出来.......

top一下,发现mysql占用内存大幅增加,显然还在数据库处理中......

出去溜达良久.......回来一看,泥妈,蹦出了一行,说啥尝试分配内存失败,超过最大限制(忘记截图了,当时用计算器算了一下,这个上限是448M)......一惊,这都不够?!

反正服务器64G内存,经常闲着近40G呢,啥了,直接加大参数吧....

于是在php.ini中加到1024M,心想,单次1G内存,挺大方的吧?

于是再跑......再出去溜达良久......再回来一看,再“”泥妈“”,还是不够!干!!懒得理它,直接加到4096M,这下总该够了吧??

再跑......再溜达......再回来....再“”泥妈“”.....再次加到超乎想象的8192M......

又跑......又溜达......又回来....又“”泥妈“”.....又一次加到史无前例的10240M......

..................杯具之所以为杯具,就因为它绝对不会只出现一次......历史总是会惊人的循环,这背后指的其实就是“杯具”.......

..................直到这一数字被我加到无以复加的20480M.......满怀希望的倒数第二次出去溜达............

..................我得承认自己步伐总是迈的太小,不吃够无数的亏之后,总是无法一次迈个超越宇宙间任何三观的大步......

最后一步,我是绝望了,直接干到40960M.......敲下nohup指令的那瞬间,心情是悲壮的.........不成功,便成仁!!再不行,一向富裕无比的服务器内存也要告枯竭了,只能废掉这个简单的脚本,老老实实构建一个算法分段处理了........可是,可是,可是明天端午啊,我还在想着能早点赶回家去,闻闻粽叶香,抱抱老婆孩子呢!!

上天有好生之德。太阳总是在最黑暗的时候露出曙光!这次也不例外。谢天谢地!就在我即将麻木的时刻,在几乎没有任何思想活动的死寂中,回到办公桌前,毫无人生冷暖可言的视觉系统运动投向到屏幕.......呀!突然生活又充满了阳光!原本寂静无声的世界,似乎一切又重新的鲜活了起来!

wo de tian !!!!

俺的屏幕,就像那久战的黑客,终于攻破了重重的堡垒一般,一行行迅疾翻滚的黑底绿字,简直比世界上任何伟大的交响乐都要更令人喜悦!!!

成功了!!!!

这一刻,俺这颗差点已如枯井般的心,差点就要如婴儿般地欢呼雀跃了起来!!!!

此刻,我最想说的就是:程序猿的快乐,真的是这世界上最为美妙的体验。。。。。

而且,没有之一!

亲爱的朋友,你能体会吗??

不能??别急,俺最后还是截了一张图的,让您也能和我一起,体验到这世界真理发现般似的、超绝人寰的美妙之乐.....


由图可见,该次php单任务,居然占用了不可思议的大32G内存!!而主干代码只有不到20行(围绕着group by出来的结果循环处理而已........

量变引起质变!!

果然是这个宇宙颠灭不破的真理!!

i 服了!!

啥也不说了,执行完毕,立马将上限参数还原回原来认为99%情况下都应该充足的448M.....

......回家啰......

朋友,你呢??

不管怎样,端午节快乐!!吐舌头

原创粉丝点击