2017-02-17 6 views
0

우리는 일부 입력 데이터에 대해 .xlsx 파일을 읽고 보고서를 생성하는 유틸리티 프로그램을 가지고 있습니다.이 목적으로 Apache POI가 사용됩니다. Excel 파일에는 평균 50 행 20 열의 데이터가 포함 된 8 개의 시트가 있습니다. 모든 것이 정상적인 Windows 7 상자 (개발자 컴퓨터 읽기)에서 정상적으로 작동하고있었습니다. 파일 읽기는 몇 초 후에 완료됩니다.Window Server 2012 R2의 Apache POI

최근에 이러한 작업을 Windows Server 2012 R2 상자로 옮겼으며 Excel 파일의 마지막 시트가 읽기를 완료하는 데 많은 시간이 걸리는 것으로 나타났습니다. 마지막 시트가 데이터 문제가 아니며 작업을 실행했음을 확인하기 위해 두 번째 마지막 시트 (이전 실행의 마지막 시트)가 밀리 초 단위로 읽히고 마지막 시트 (복제 된 시트)가 다시 읽혔습니다. 15 분 동안 붙어서. 내 최선의 추측은 파일을 닫는 데 걸린 시간이 너무 길어지고 있기 때문일 수 있습니다. 그러나 그 이유가 확실하지 않은 경우 그 사실을 증명할 수있는 추측과 확실한 증거가 아닙니다. 작동중인 Windows 상자와 작동하지 않는 상자의 차이점은 OS 뿐이며 나머지 구성은 모두 비슷합니다. 나는 힙과 쓰레드 덤프를 분석했는데 문제는 발견되지 않았다.

POI 및 Windows 서버 상자에 알려진 호환성 문제가 있습니까? 아니면 코드와 관련된 것입니까? 우리는 POI-XSSF 구현을 사용하고 있습니다.

+1

'Apache POI'는'Java' 소프트웨어입니다. 따라서 "Windows Box"내에서 직접 실행되지 않고 Java Runtime Environment의 Java Virtual Machine 내에서 실행됩니다. 따라서 Windows 시스템간에 Java JRE 버전을 비교하고 [Java의 시스템 요구 사항] (https://www.java.com/en/download/help/sysreq.xml)을 수행하는 방법을 살펴 보겠습니다. –

+0

나는 비교를했으며 VM은 동일하며 둘 다 Java 1.8에서 실행됩니다. Java VM을 실행하는 데 문제가 없습니다. 필자의 문제에서 언급 한 것처럼 Excel 파일 읽기가 항상 마지막 시트에 붙어 있습니다. – Rajeev

+1

그러면 다음은 포함하는 '* .xlsx'를 읽는 가능한 가장 작은 예제를 만드는 것입니다. 여러 장은 현재 프로그램에서이 작업을 수행하는 것과 같은 방법으로 수행됩니다. 이 간단한 작업을 중심으로 전체 작업을 수행하지 않아도됩니다. 그렇다면 두 시스템 모두에서이를 테스트 할 것입니다. 가장 작은 형태로 성능이 다르다면 여기에 코드를 게시하고 다른 이유를 물을 수 있습니다. 그렇지 않으면 현재 프로그램에서 추가 작업을 추가하고 다시 테스트하십시오. 성능 차이가 발생할 때까지 수행하십시오. 대부분의 시간 당신은 그 때 이유가 무엇인지를 압니다. 그렇지 않은 경우 코드를 게시 할 수 있습니다. –

답변

0

마지막으로 문제가 발생했습니다. 확인 된 문제는 VM 자체에서 발생하며 디스크 I/O 작업은 항상 100 %이고 파일 읽기/쓰기는 완료하는 데 많은 시간이 걸렸습니다. 이로 인해 프로그램이 멈추었습니다. 그러나 우리는 디스크 I/O가 높은 이유를 알지 못하고 일부 블로그를 시도했지만 작동하지 않아 Windows 2008 서버로 OS를 다운 그레이드하고 잘 작동했습니다.

POI 또는 아무 관련이 없으므로 확실히 VM/OS 문제였습니다.