솔직히 나는 놀랐다. 위에서 당신은 누군가가 Linux에서 캐시 정리와 같은 일을 하는 한 가지 이유를 썼습니다: 테스팅, 특히 벤치마킹. 그런 다음 매일 밤 캐시를 정리하는 크론 작업을 설정하는 방법을 설명합니다.
그게 무슨의미입니까? 이 글을 읽는 초보자는 캐시를 청소하는 것(또는 스왑 파티션을 다시 연결하는 것)이 Windows에서 Internet Explorer의 디스크 캐시를 정리할 때와 같이 관리 목적으로 수행 기계.
그렇지 않다. 왜 안되는지에 대한 설명은 귀하의 기사에 있지만 어떻게 언급되는지 방법에 대한 지침에 포함된 방식은 초보자에게 오해의 소지가 있는 것 같으므로 설명을 허용하십시오.
예, 시스템 메모리가 소모되어 시스템이 메모리 페이지를 스왑 파티션으로 마이그레이션하기 시작하는 너무 나쁜 메모리 주변에 일부 응용 프로그램이 있습니다. Firefox는 2GB의 시스템 메모리만으로 실행될 때 문제가 될 수 있기 때문에 마음에 떠오릅니다.
특히 메모리가 부족한 웹 페이지의 탭을 닫더라도(ebay는 여기에서 정말 나쁜 범죄자입니다) 메모리의 모든 코드가 원래대로 해제되지는 않습니다. 이것은 Linux가 아니라 애플리케이션의 문제라는 점을 명심하십시오. 즉, 어쨌든 캐시를 삭제하는 것과 같이 운영 체제를 만지작거려도 해당 메모리를 다시 얻을 수 없습니다. 필요한 개입은 Firefox에 대해 조치를 취하는 것입니다.
메모리를 되찾는 유일한 방법은 문제가 되는 프로세스(예: Firefox)를 종료하는 것입니다. 이에 대한 주목할만한 예외는 적절하게 구성되지 않은 경우 메모리를 낭비하는 것처럼 보일 수 있는 데이터베이스입니다( 응용 프로그램) 하지만 그 경우에도 먼저 데이터베이스를 살펴봐야 합니다('데이터베이스 관리자'는 이유. 당신이 무엇을 하든지 캐시를 제거하는 것은 도움이 되지 않습니다).
그래서 네, 제가 말하려는 것은 이 기사의 두 번째 문장에 있는 전치사가 거짓이라는 것입니다. 메모리를 소모하는 프로세스가 있는 경우 프로세스가 실행되는 동안 캐시를 제거해도 캐시가 건드리지 않습니다.
프로세스를 종료하면 메모리가 해제됩니다. 때로는 커널이 종료된 프로세스 자체가 요구하는 대부분의 메모리를 어떻게 버리기로 결정하는지 관찰할 수도 있습니다. 즉, 캐시에 보관하지도 않습니다.
프로세스가 충분한 메모리를 요청했다면 메모리에서 많은 필수 코드를 다음으로 옮겼을 수 있습니다. 스왑 공간으로 인해 해당 메모리 코드가 완료될 때까지 컴퓨터가 잠시 더 느리게 실행됩니다. 검색했습니다. 이제 집에서 데스크탑을 사용하는 경우 위의 지침에 따라 '스왑오프 -a && 스왑온 -a' 하고 차를 마시고 돌아오면 컴퓨터가 다시 빨라집니다.
차를 좋아하지 않는다면 메모리가 다시 마이그레이션되는 데 오랜 시간이 걸리지 않을 것이므로 스왑을 다시 연결하지 않고 하던 일을 계속하고 싶을 수도 있습니다. 스왑을 다시 연결하지 않으면 실제로 필요한 코드만 메모리에 다시 배치된다는 이점이 있습니다(제가 선호하는 선택). 따라서 스왑을 다시 연결하면 커널이 처리하도록 하는 것보다 전체적으로 더 많은 시스템 리소스가 소모됩니다.
당신이 무엇을 하고 있는지 정말로 알고 있다고 생각하지 않는 한 라이브 프로덕션 시스템에서 스왑을 다시 연결하지 마십시오. 그러나 라이브 프로덕션 시스템에서 이런 종류의 작업을 수행할 때 해야 하는 것처럼 연구/테스트를 수행하는 동안 어쨌든 이것에 대해 알게 될 것이기 때문에 이 말을 할 필요가 없습니다.
여기에 또 다른 생각이 있습니다. 아마도 캐시 드롭 오류는 Linux 시스템에서 메모리 사용량이 전통적으로 설명되는 방식에서 비롯된 것일 수 있습니다. 예를 들어 '맨 위' 터미널에서 '라고 표시된 행을보십시오.멤', ' 항목이 있습니다.무료' 그리고 '사용 된' 메모리.
이제 사용된 메모리에 대한 통계에는 캐싱 및 버퍼링에 사용된 메모리가 항상 포함됩니다. 여유 메모리는 전혀 사용되지 않는 메모리입니다. 따라서 OS 및 응용 프로그램에 사용된 메모리를 알고 싶다면 사용된 메모리에서 버퍼 및 캐시 값을 빼면 응용 프로그램에 사용된 모든 잔여 메모리의 공간을 얻을 수 있습니다.
그것을 모르고 여유 메모리의 양만 보았다면 실제로 실제 메모리가 부족하지만 캐시에서 사용하는 메모리가 많은 한 그렇지 않습니다. 진실. 위에서 설명한 대로 캐시를 삭제하면 top은 해당 메모리를 모두 여유 메모리로 보고하지만 실제로는 테스트하거나 벤치마킹하지 않는 한 원하는 것이 아닙니다(여기에 있는 Ole Tanges 게시물 참조 예).
이제 Linux 커널의 정책은 유용한 것을 위해 최대한 많은 메모리를 사용하는 것입니다. 첫 번째 우선 순위는 분명히 os / 응용 프로그램 코드로 이동합니다. 나머지는 모두 버퍼/캐시에 사용됩니다(자세한 내용은 여기: http://stackoverflow.com/questions/6345020/linux-memory-buffer-vs-cache).
그것은 기사에서 위에 작성되었지만 여기서 다시 말하겠습니다. 캐시의 데이터는 기본 드라이브에 저장된 파일의 복사본입니다. 다시 필요할 때를 대비하여 거기에 보관되므로 드라이브에서 다시 읽어야 하는 것보다 훨씬 빠릅니다.
이것은 좋은 것이며 어떤 종류의 Linux 설치에서도 그대로 유지하기를 원합니다. 테스트하지 않는 한(테스트 환경에서). 아니면 그냥 놀고 새로운 것을 배우면 기사가 훌륭합니다!
추신: 나는 분명히 제한된 메모리에 문제가 있는 동안 캐시를 플러시하려고 하는 몇몇 사람들을 발견했습니다. 전에 말했듯이 이것은 os 수준이 아닌 응용 프로그램 수준에서 봐야 할 것입니다.
메모리 병목 현상을 일으키는 원인을 찾는 좋은 첫 번째 단계는 '맨 위‘. 명령줄에 이것을 입력하고 다음을 누릅니다. 쉬프트+m (또는 중 원한다면). 이렇게 하면 시스템에서 실행 중인 프로세스 목록이 잔여 메모리 공간을 기준으로 정렬됩니다. 주목해야 할 칼럼은 '해상도' 잔여 메모리(가상 메모리 공간 내에서 실제로 할당된 메모리)의 경우.
어떤 프로세스가 대부분의 문제를 일으키는지 곧 알게 될 것입니다. 다음에 무엇을 해야 하는지에 대한 답은 없습니다. Firefox와 같은 프로세스가 다시 시작될 수 있습니다. 메모리 문제가 가상 머신으로 인해 발생한 경우 호스트 메모리가 과도하게 커밋된 것 같습니다. 모든 VM의 메모리가 호스트의 총 물리적 메모리 양을 초과하거나 최소한 실행할 공간을 남기지 않습니다. 그 자체.
이것이 실제 문제라면 각 VM에 할당 가능한 메모리를 줄이려고 할 수 있습니다. 이것이 옵션이 아닌 경우 이 문제를 해결하는 가장 저렴하고 쉬운 방법은 일반적으로 상자에 더 많은 메모리를 넣는 것입니다(KVM을 실행하는 경우 다음을 읽는 것이 좋습니다. http://www.linux-kvm.org/page/Memory).
실행 중인 애플리케이션에 메모리 관리 버그가 있을 수 있습니다(업그레이드 또는 다운그레이드 시도, 버그 보고서 제출 고려). 응용 프로그램이 설치한 것보다 더 많은 메모리가 필요할 수 있습니다(이미지/비디오 편집 필요한 메모리 양이 작업 중인 파일의 크기에 따라 달라지는 앱이 떠오릅니다. 에).
다시 말하지만 이것이 계속되는 문제라면 메모리를 업그레이드할 수 없습니다. 엔터프라이즈급 데이터베이스 Oracle 등 여기에서 조언하기가 더 어렵습니다. 그들은 자신의 캐시 관리를 할 수 있기 때문에 실제로 무슨 일이 일어나고 있는지 반드시 볼 수는 없습니다. 그냥 '더 많은 주석'을 던집니다. 즉, 더 많은 메모리를 설치하는 것만으로는 거의 효과가 없습니다. 차이점.
실행 중인 특정 db에 대한 프로파일링에 대한 소개를 읽으십시오(아직 없는 경우): 테스트 머신을 설정하십시오(하드웨어가 프로덕션 1), 프로덕션 상자에서 구성 및 데이터 세트를 복사하고 피크 사용 사례 중 일부를 복제하고 가져오기를 희망하는 테스트 시나리오를 설정합니다. 거기. Apache, 엔터프라이즈급 회계 소프트웨어와 같은 분산 앱에는 고유한 특정 요구 사항이 있습니다.
무엇을 하든지 앱 설명서를 살펴보세요.
무슨 일이 일어나고 있는지 이해하면 os 수준에서 수행할 수 있는 몇 가지(고급) 작업이 있습니다. 한 가지 예는 '교환' 특정 애플리케이션 세트(읽기 http://unix.stackexchange.com/questions/10214/how-to-set-per-process-swapiness-for-linux/10227#10227).
프로덕션 시스템에서 이것을 설정하는 것을 고려한다면 먼저 테스트 환경에서 설정하고 원하는 대로 작동하는지 확인하는 것이 좋습니다. 경고를 받았습니다.
회신하다캐시를 지우는 것은 확실히 쓸모가 없습니다..
보이는 캐시는 디스크 파일의 직접적인 메모리 내용일 뿐입니다( ext2-3-4 기본 액세스 속도 향상). 목표는 메모리를 사용할 수 있을 때 일반적으로 사용되는 파일에 대한 액세스를 향상시키는 것입니다( RAM은 사용되지 않음).
따라서 Linux는 프로세스에 메모리가 필요할 때 이 "캐시"를 자동으로 해제합니다. 캐시 내용을 "재설정"하여 수행하는 작업은 램 내부의 해당 파일 내용을 제거하고 시스템에 요청하는 것입니다. 대신 디스크 콘텐츠를 사용하는 것 )
그러면 나에게 이것은 쓸모가 없으며(OS에 의해 자동으로 관리됨) 심지어 고부하 애플리케이션에서 성능 문제로 이어질 수 있습니다…
회신하다이것을 사용할 때:
성능을 측정할 때 재현 가능한 방식으로 측정하는 것이 중요할 수 있습니다. 캐시는 종종 이러한 결과를 엉망으로 만들 수 있습니다.
따라서 모든 캐시를 삭제하는 상황 중 하나는 동일한 작업을 수행할 수 있는 더 많은 방법이 있고 가장 빠른 방법을 파악하려는 경우입니다.
에코 3 | sudo 티 /proc/sys/vm/drop_caches. 시간 do_the_thing version1. 에코 3 | sudo 티 /proc/sys/vm/drop_caches. 시간 do_the_thing version2.회신하다