我有一个脚本,它是一个更大的电子程序的一部分。该脚本是一个循环,它从应用程序的临时目录中读取文件,然后将所有文件上传到 S3。这对于小型文件集效果很好,但在较大的文件集上,它会导致计算机冻结并因系统崩溃而重新启动(Macbook pro 2018)。我测试过的一个大集合包含大约 600 个文件(每个文件都很小,小于 1 mb)。
我无法从脚本本身得到任何错误,因此调试起来有点困难。我可以猜想,这必须同时对许多人fs.lstatSync或对许多人put都活跃。
我想要一些关于我如何调试它的建议(因为计算机冻结而很难)或者关于打开多少fs.lstatSync并且put有多少稳定的建议。
const upload = (): void => {
const fileUploadPromises = [];
const userDataPath = remote.app.getPath('temp');
let i = 0;
let bytes = 0;
let totalBytes = 0;
let lastUpdate = 0;
for (const file of filenames) {
const filePath = `${userDataPath}chunks/${file}.ts`;
const stats = fs.lstatSync(filePath);
const { size } = stats;
const createdFile = createFileData.createFile[i];
totalBytes = totalBytes + size;
fileUploadPromises.push(
put({
url: createdFile.presignedPutUrl,
body: fs
.createReadStream(filePath)
.on('data', c => {
bytes += c.length;
const stepSize = totalBytes / 100;
if (bytes - lastUpdate > stepSize) {
setProgress(bytes / totalBytes);
lastUpdate = bytes;
}
})
.on('error', e => {
console.error(e); // eslint-disable-line
}),
headers: {
'Content-length': size,
}
}).catch(e => {
console.error(e); // eslint-disable-line
})
);
i = i + 1;
}
};