[求助]怎么排查org 导出pdf速度很慢占用内存很大

我用org导出pdf beamer,有时候org文件稍大点,速度就会很慢,“卡”在org导出latex这个过程中,占用内存会上升到十几个、二十几G,但大多数最终会导出成功,今天导出一个org文件直接飙升到40G,请教一下怎么排查这个问题。

定位函数问题:

  1. M-: (profiler-start 'cpu+mem)
  2. 导出文件
  3. M-x profiler-report

定位文件问题:

  1. 二分法由下至上屏蔽文件内容
  2. 导出,观察内存占用
1 个赞

谢谢,以后遇到没有完全卡死试一试。

记录一下,org-export--generate-copy-script函数占了很大的运行时间和空间。

你先导出 tex 文件看快不快,然后用 latex 命令编译 tex 文件看看是不是很慢,如果很慢,那就不是 emacs 的问题.

是org导出latex这个阶段的问题,minibuffer中可以看到,还没有到编译tex这一步。

可以用 emacs -q 在只加载 org 的情况下导出试试, 如果没问题的话可能是配置或者其他 package 在 org-export 里面加了些有 bug 的 advice, 那个 org--fix-async-export-a 函数看起来就挺可疑的.

确实可疑,我查了org--fix-async-export-a这个函数的帮助,helpful说是org.el文件中定义的函数

但我在org.el文件中却没有找到这个函数。在doom-emacs里面搜了一下,原来是doom-emacs定义的advice:

(defadvice! +org--fix-async-export-a (fn &rest args)
    :around '(org-export-to-file org-export-as)
    (let ((old-async-init-file org-export-async-init-file)
          (org-export-async-init-file (make-temp-file "doom-org-async-export")))
      (doom-file-write
       org-export-async-init-file
       `((setq org-export-async-debug ,(or org-export-async-debug debug-on-error)
               load-path ',load-path)
         (unwind-protect
             (let ((init-file ,old-async-init-file))
               (if init-file
                   (load init-file nil t)
                 (load ,early-init-file nil t)
                 (require 'doom-start)))
           (delete-file load-file-name))))
      (apply fn args))))

可能问题是出在这里。我遇到的这种问题,重启emacs后大多不能重现。