报错如下
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... 跟这个情况类似
请问怎么解决比较好 能不能不断清楚内存的垃圾?
올바르게 계산하면 10만 개의 레코드를 한 번에 꺼내는 셈입니다. 레코드 한 행을 10K로 추정하면 10만 개의 레코드는 약 1G의 메모리이므로 OOM이 발생합니다
이 문제를 해결하는 가장 좋은 방법은
流处理
입니다. 각highWaterMark
을 10,000으로 설정합니다. 예를 들어, 가져올 데이터는 총 100만 개입니다. 배열을 제어하고 코드 아래에 로드할 필요가 없습니다. 한 번에 10,000개를 처리하는ReadStream
대화가 저렴합니다. 코드를 보여주세요
의사코드는 위와 같으며,
untest
실제 업무에 맞게 변경하세요