Drupal 7 사이트 중 하나에는 수천 개의 필드, 많은 콘텐츠 유형, 25 회 이상의 조회수 및 수백 개의 프로필 유형이 있습니다. 이 때문에 엔터티 필드 정보 (http://drupal.org/node/1040790)를 더 잘 캐시하는 핵심 패치와 하나의 HUGE가 아닌 디스플레이로 뷰를 더 잘 캐시하는 -dev 버전의 Views를 사용하고 있습니다. 모든 뷰 데이터가 포함 된 뷰 캐시 행).
이로 인해 사이트의 대부분의 페이지가 160MB 이상이 아니라 20-30MB의 RAM을로드하는 데 도움이되었습니다 (10MB 이상의 필드 및 뷰에 대해 cache_ * 테이블 행을 가져 오는 대신 패치는 cache_ * 데이터를 훨씬 더 효율적으로 유지하는 데 도움이 됨).
그러나 캐시 재 구축에 시간이 오래 걸린다는 문제가 있습니다. 보통 1-2 분 이상. 그리고이 시간 동안 Drupal은 단순히 페이지를로드하지 않습니다 (읽고 자하는 캐시가 아직 빌드되지 않았기 때문에 다른 요청은 기다려야 함).
트래픽이 적은주기에서는 큰 문제가 아닙니다. 백 명 정도의 사용자는 페이지가로드되기 전에 1 분 정도 기다려야합니다. 그러나 트래픽이 많은주기 동안 Apache 서버는 40 개 이상의 CPU로드로 열이 나기 시작하고 모든 작업자 스레드가 대기하고 메모리를 최대로 사용하여 스왑을 발생시키기 때문에 메모리가 빠르게 채워집니다. 일종의 죽음의 나선입니다. httpd를 다시 시작하면 문제가 해결되지만 상황이 정상으로 회복 되려면 5-10 분이 걸립니다.
내 목표는 캐시 공간을 확보하여 사이트를 무릎으로 가져 가지 않도록하는 것입니다. 예를 들어 admin_menu의 개별 캐시 지우기 기능 (예 : "CSS 및 JS", "메뉴", "테마 레지스트리"등)을 사용하면 "Page and else"옵션을 누를 때까지 문제가 해결됩니다. 이때 뷰 캐시가 재설정되고 (캐싱해야하는 뷰 수가 많은 CPU 및 데이터베이스 집약적 인 작업) 필드 정보 캐시가 재설정 될 때 (이 사이트의 CPU 및 데이터베이스 집약도)입니다.
그래서 ... 내 질문 / 아이디어 :
- drush 및 / 또는 다른 셸 스크립팅을 사용하면 "한 번에 모든 캐시를 폭파하고 깨끗한 재 구축을 희망"하는 것보다 더 지능적인 방식으로 캐시를 지울 수 있습니까?
- 캐시 지우기가 진행되는 동안 http 요청을 차단하여 아파치가 많은 캐시 스탬프 요청으로 인해 막히지 않을 수 있습니까?
- Drupal / normal httpd 요청 외부에서 캐시를 지울 수 있다면 캐시 지우기 작업에 대해 더 높은 PHP memory_limit를 설정하고 범용 memory_limit를 취소 할 수 있습니다 (개별 httpd 스레드가 캐시를 지워야하는 경우 현재 256MB로 설정). ...).
기본적으로 : UI에서 버튼을 클릭하거나 사용하는 것 외에도 Drupal을 사용하여 모든 캐시를 지우는 지능적이고 우아한 방법이 drush cc all
있습니까?
[ 명확한 편집 : 내가 가진 주요 문제는 캐시 재 구축 입니다. (a) 시간이 걸리고 (b) 재 구축이 완료 될 때까지 다른 모든 요청을 차단합니다. 교통량이 많은 시간에 재건이 치명적이지 않도록하는 방법을 찾고 싶습니다.]