3

我有一个脚本,它是一个更大的电子程序的一部分。该脚本是一个循环,它从应用程序的临时目录中读取文件,然后将所有文件上传到 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;
  }
};
4

0 回答 0