2014-12-01 2 views
2

우리는 많은 로깅을하는 어플리케이션을 가지고 있습니다. 우리가 기록하는 매체는 SLC SSD 드라이브이지만 현장에서 몇 가지 실패를보기 시작했습니다. 로그 오프를 해제하고 로그 수준을 유지할 수 있지만 엔지니어가 오류를 진단하기 위해 로깅을 켜고 나중에 시간이 지남에 따라 실패한 SSD를 발생시키는 것을 잊어 버리는 경우가 있습니다.SSD에 로그를 쓰는 가장 좋은 방법

로깅 코드를 보면 로그 항목을 대기열에 저장하고 5 초마다 콜렉션을 반복하고 File.AppendAllText을 사용하여 파일에 줄을 씁니다.

MSDN에 따르면이 파일에 기록한 다음 파일을 닫습니다.

동일한 기능을 수행하지만 SSD의 손상을 방지하거나 줄이기 위해 사용하는 것이 더 나은 정권은 무엇입니까?

소프트웨어 시작시 FileStream을 열고 사용 중에 스트림에 쓰고 소프트웨어를 종료하기 전에 닫는 것이 더 좋습니까? 이것이 디스크 수준에서의 상황을 어떻게 완화시킬 수 있습니까? 어떤 프로세스가 관련되어 있으며 파일을 열고 즉시 닫는 것보다이 프로세스가 더 좋습니다. FileStream을 사용하면 '느낌이 더 좋아 지지만 변경하기 전에 좀 더 구체적인 근거가 필요합니다.

아마도 우리가 고려하지 않은 더 좋은 방법이있을 것입니다.

+0

SSD의 쓰기 수명은 제한적입니다. 다른 유형의 디스크 기술이나 다른 브랜드의 SSD를 살펴보십시오. http://www.pcworld.com/article/2043634/how-to-stretch-the-life-of-your-ssd-storage.html – Paparazzi

+0

우리는 다른 이유로 SSD를 사용하며 100 가지 시스템을 변경할 수 없습니다 . 우리는 이미 SSD (비용 대 품질)의 가장 강력한 브랜드라고 생각하는 것을 사용합니다. .NET이 드라이브에 쓰는 방법과 그 프로세스의 메카닉을 보여주는 대답을 찾고 있습니다. – Sparers

+0

5 초마다 쓰기가 5 초마다 쓰기입니다. 나는 파일을 열어 두는 것이 마법의 총알이 될 것이라고 생각하지 않는다. 파일 스트림이 디스크에 씁니다. MLC의 정격 수명은 10,000 회입니다. 매 5 초마다 14 시간입니다. – Paparazzi

답변

0

이것은 쓰기 수는 적지 만 작성된 SSD 페이지 수는 그다지 많지 않습니다. 버퍼가 많을수록 물리 쓰기가 적어집니다.

AppendAllText 한 줄을 추가하는 것은 매우 비효율적 인 방법입니다. 많은 수의 개체와 핸들을 각 줄마다 열고 닫아야하기 때문에 많은 CPU가 소모됩니다. 파일 크기가 각각 변경되면 해당 변경 사항이 강화 될 때 NTFS 로그가 플러시됩니다.

AppendXxx 전화를 걸 때마다 5 초마다 모든 데이터를 쓰거나 FileStream을 사용하여 유사한 데이터를 작성하십시오. 당신은 열어 둘 수 있습니다. 그건 중요하지 않아. 5 초마다 한 번 추가 IO가 내구성을 위해 의미가 없습니다.

이보다 더 효율적 일 수는 없습니다. 이 체계는 최소한의 양의 데이터를 순차적으로 씁니다.

작성한 내용을 압축하는 것을 고려하십시오.

+0

이것은 내가 생각했던 것보다 훨씬 낫다. – Sparers

1

로그 메시지를 저장할 메모리가 충분하지 않은 경우 큐에 대기하고 자주 커밋하지 마십시오. 하지만 문제가 발생하면 최근 로그 메시지가 표시되지 않습니다.

관련 문제