草庐IT

mysql - php cli 脚本挂起,没有消息

coder 2023-10-24 原文

我编写了一个通过 SSH 和 nohup 运行的 PHP 脚本,用于处理数据库中的记录并对其进行操作(例如,处理一些图像,更新一些行)。

它适用于小负载,最多可能有 10k 条记录。我有一些更大的数据集,可以处理大约 40k 条记录(我意识到不是很多,但是当每条记录需要下载和处理多达 50 张图像时,这会增加很多工作量)。

较大的数据集可能需要数天才能处理。有时我会在我的调试日志中看到内存错误,这些错误已经足够清楚了——但有时脚本似乎“死了”或在我身上变成了僵尸。我的 debug 日志的尾部刚刚停止,没有错误消息,nohup 日志的尾部没有错误结束,进程仍然显示在 ps 列表中,看起来像这样--
26075 点/0 S 745:01/usr/bin/php ./import.php
但没有完成任何工作。

任何人都可以给我一些关于为什么进程会退出的想法吗?据我所知,显而易见的事情(如 php 脚本超时和内存问题)不是一个因素。

感谢任何提示

PS -- 这是托管在一个 godaddy VDS 上(不是我的选择)。我有点怀疑 godaddy 有某种限制可能会影响我,尽管我在代码中设置了重写(例如 set_time_limit(0);)。

最佳答案

很可能是 OOM killer .如果你真的,真的真的想远离它,作为root,让你的进程写-17/proc/self/oom_adj警告:内核通常知道得更多。避开 OOM killer 实际上会削弱您尝试查询的同一个 RDBMS。这将是一个多么恶性循环:)

您可能(相反)想要根据从 /proc/loadavg/proc/meminfo 中读取的内容错开查询。如果您以指数方式增加负载或交换,则需要退后,尤其是作为后台进程:)

此外,监控IOWAIT当你运行时。与系统启动时间相比,这可以从 /proc/stat 中取平均值。在开始和进步时记下它。

不幸的是,被称为 OOM killer 的连环 killer 不维护除了解析内核消息之外可访问的正文计数。

或者,您的 cron 作业不断达到其 ulimit 已分配堆的数量。无论哪种方式,您的工作都需要在适当的时候后退,或者在进行任何工作之前防止其自身消亡(如上所述)。

附带说明一下,您可能不应该在共享主机上做您正在做的事情。如果它有那么大,是时候(至少)获得一个 VPS,您可以在其中控制哪个进程可以做什么。

关于mysql - php cli 脚本挂起,没有消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754781/

有关mysql - php cli 脚本挂起,没有消息的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  3. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  4. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  5. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  6. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  7. 没有类的 Ruby 方法? - 2

    大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow

  8. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  9. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

    我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

  10. ruby - 没有类方法获取 Ruby 类名 - 2

    如何在Ruby中获取BasicObject实例的类名?例如,假设我有这个:classMyObjectSystem我怎样才能使这段代码成功?编辑:我发现Object的实例方法class被定义为returnrb_class_real(CLASS_OF(obj));。有什么方法可以从Ruby中使用它? 最佳答案 我花了一些时间研究irb并想出了这个:classBasicObjectdefclassklass=class这将为任何从BasicObject继承的对象提供一个#class您可以调用的方法。编辑评论中要求的进一步解释:假设你有对象

随机推荐