- 需求:前端選擇多條數據,點擊下載按鈕,下載帆軟報表的pdf格式。 (目前用的是帆軟PDF下載接口,然后java轉成文件流,前端接到后端接口的文件流,使用axios下載blob,再創建下載鏈接,通過link標簽實現瀏覽器下載)
- 問題描述:前端界面選中150條數據,點擊批量下載時,經常會出現下載幾kb的pdf,而且下載幾kb的PDF,之后再下載150條數據,就一直會下載幾kb的PDF,必須等4到5分鐘之后,才能下載幾兆的PDF。
- 解決辦法:因為是使用的帆軟下載PDF接口,然后用java插入到文件流中,所以一直是懷疑文件流導致的,在try-catch-finally,finally關閉輸入流、輸出流,都不起作用。后來發現帆軟下載PDF接口報錯finally,是堆內存太少導致的,調整tomcat堆內存,設置成8G后,如果不是幾個人同時下載多條PDF,基本就不會出現錯誤了。(必須等4、5分鐘才能正常下載,是因為堆內存有垃圾回收機制,過幾分鐘之后內存就會空閑,通過帆軟數據決策系統的系統監控,也能看到內存的變化情況)
帆軟文檔https://help.fanruan.com/finereport/doc-view-1021.html
tomcat更改堆內存方法:
tomcat的bin文件夾中,創建setenv.sh文件,里面內容是以下腳本,保存后重啟tomcat。
JAVA_OPTS="$JAVA_OPTS -Xms8192M -Xmx8192M -Xss1024k"
JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=2g"
JAVA_OPTS="$JAVA_OPTS -Dfineio.read_mem_limit=2"
JAVA_OPTS="$JAVA_OPTS -Dfineio.write_mem_limit=1"