node.js - nodejs 队列大数组内存溢出
PHP中文网
PHP中文网 2017-04-17 15:51:41
0
1
449

报错如下
FATAL ERROR: CALL_AND_RETRY_0 Allocation failed - process out of memory

我的代码

connection.query('select * from `table` limit 100000', function(err, rows, fields) {
数据库里的链接大概做了个队列 就是 不断取数据 大概每次做 1W 大多时候 运行不稳定 出如上报错

var array = [1,2,3,4];
function check()
{
if(array.length > 0)
var url = array.pop();
load(url);
}}
function load(url)
{
http.get(url, function(res){
check();
)
}}

http://stackoverflow.com/ques... 跟这个情况类似
请问怎么解决比较好 能不能不断清楚内存的垃圾?

PHP中文网
PHP中文网

认证高级PHP讲师

全員に返信(1)
洪涛
  • 正しく数えると、一度に 100,000 レコードを取り出すことになります。1 行のレコードを 10K と見積もると、100,000 レコードは約 1 G のメモリに相当するため、OOM が発生します。

  • この問題に対処する最良の方法は 流处理 です。たとえば、取得するデータが合計 100 万件あるとします。配列を制御してコードの下にロードする必要はありません。一度に 10,000 個を処理する highWaterMarkReadStream

    を記述します。
  • 話は安いです、コードを見せてください

  • リーリー
  • 疑似コードは上記の通りです。

    実際の業務に合わせて変更してくださいuntest

注:

ReadStream をデータ読み取り用の mysql ストリームよりも大きく設定するのが最善です。そうしないと、データが遅すぎるとデータが失われます highWaterMark! ! consumer

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート