APC önbellek girdileri nasıl temizlenir?

12 Cevap php

I need to clear all APC cache entries when I deploy a new version of the site. APC.php has a button for clearing all opcode caches, but I don't see buttons for clearing all User Entries, or all System Entries, or all Per-Directory Entries.

Bu komut satırı, veya başka bir şekilde üzerinden tüm önbellek girişlerini temizlemek için mümkün mü?

12 Cevap

Sen PHP işlevi apc_clear_cache kullanabilirsiniz.

apc_clear_cache() sistem önbelleğini temizleyin olacak çağrılması ve apc_clear_cache('user') kullanıcının önbelleğini temizleyin olacaktır çağırıyor.

Ben bu cevapları herhangi aslında komut satırından APC önbelleğini temizleyerek için işe inanmıyorum. Frank Farmer Yukarıda da değindiğimiz gibi, CLI Apache ayrı bir işlemde çalışır.

Komut satırından takas için benim çözüm kopya web dizine bir APC takas komut ve eriştiği ve sonra siler bir senaryo yazmak oldu. Komut localhost'tan erişilen sınırlıdır.

  1. apc_clear.php

    Bu web dizini komut dosyası kopyalar, erişen dosya ve siler.

    <?php
    if (in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1')))
    {
      apc_clear_cache();
      apc_clear_cache('user');
      apc_clear_cache('opcode');
      echo json_encode(array('success' => true));
    }
    else
    {
      die('SUPER TOP SECRET');
    }
    
  2. Cache clearing script

    Kopyalar web dizini apc_clear.php Bu komut, sonra siler, onu erişir. Bu Symfony görevin kapalı dayanır. Symfony sürümünde, aramalar hataları işlemek, hangi kopya Symfony şeklinde yapılır ve bağlantısını edilmiştir. Sen onlar başarılı kontrolleri eklemek isteyebilirsiniz.

    copy($apcPaths['data'], $apcPaths['web']); //'data' is a non web accessable directory
    
    $url = 'http://localhost/apc_clear.php'; //use domain name as necessary
    $result = json_decode(file_get_contents($url));
    
    if (isset($result['success']) && $result['success'])
    {
      //handle success
    }
    else
    {
      //handle failure
    }
    
    unlink($apcPaths['web']);
    

Ben herkes için değil biliyorum ama: zarif bir Apache yeniden yapmak değil neden?

Için, örneğin Centos / RedHat Linux durumda:

sudo service httpd graceful

Ubuntu:

sudo service apache2 graceful

Bu belgelerinde belirtildiği değil, ama yapmanız gereken işlem kodu önbelleğini temizlemek için:

apc_clear_cache('opcode');

EDIT: Bu yalnızca APC bazı eski sürümleri için geçerli gibi görünüyor ..

Olursa olsun, kullandığınız hangi sürümü cli komut mod_php veya fastcgi gibi farklı bir sürecin bir php cli komut değil net mod_php veya Fastcgi APC önbellek çalışacaktır çünkü. Sen işlemi için önbelleği temizlemek istiyorsanız (veya çocuk süreç) içinde () apc_clear_cache çağırmanız gerekir. Basit bir php komut dosyası çalıştırmak Kıvrılmaları kullanarak böyle bir yaklaşımdır.

Eğer nginx / PHP-FPM yığını üzerinde çalışıyorsa, en iyi bahis muhtemelen sadece php-fpm yeniden etmektir

service php-fpm reload (veya yeniden komutu, sistem üzerinde ne olursa olsun)

Henüz söz konusu değil komut satırı kullanımı, için başka bir olasılık kıvrılmasını kullanmaktır.

Eğer hisse senedi apc.php script kullanarak eğer bu tüm önbellek girdileri için sorununuzu çözmez, ama bir adapte komut dosyası veya yerine koyduk başka bir diyebiliriz.

Bu işlem kodu önbelleği temizler:

curl --user apc:$PASSWORD "http://www.example.com/apc.php?CC=1&OB=1&`date +%s`"

Kullanıcı önbelleği temizlemek için 3 OB parametreyi değiştirin:

curl --user apc:$PASSWORD "http://www.example.com/apc.php?CC=1&OB=3&`date +%s`"

Bir komut hem çizgiler koy ve env $ PAROLASIZ diyoruz.

(Eğer ihtiyacınız varsa kullanım sudo): Eğer komuta apc önbelleğini temizlemek istiyorsanız

php -r "apc_clear_cache(); apc_clear_cache('user'); apc_clear_cache('opcode');"

APC istikrarlı onun arayüzü kendisi bir önbelleği temizlemek için seçeneği yaşıyor. Bu girdileri temizlemek için size arayüzü APC için giriş yapmalısınız.

APC apc.php dosyasında kullanıcı adı ve parola ayarlamak için seçenek yaşıyor.

enter görüntü açıklaması here

Biz dosyalara sembolik için APC ve sembolik bir sorun vardı - bu dosyalar kendisi değişiklikleri görmezden görünüyor. Her nasılsa dosyanın kendisi yardımcı touch performans. Bir dosyayı oynamamıza ve onu dokunmadan arasındaki fark ne olduğunu söyleyemem, ama bir şekilde gerekli ...

Benim için iyi bir çözüm, sadece dağıtmak sonra bir daha eski bir kullanıcı önbelleği kullanarak değil idi.

Size her tuşları öneki eklerseniz önbellek girdileri veri yapısını değiştirmeyle ilgili öneki değiştirebilirsiniz. Bu dağıtmak aşağıdaki davranış almak için yardımcı olacaktır:

  1. Sadece güncellenen yapıların dağıtmak sonra eski önbellek girdilerini kullanmayın
  2. Sayfanızı yavaşlatmak değil daŘıtımı üzerindeki tüm önbelleğini temizleyin etmeyin
  3. (Kayıtlar otomatik olarak zaten kaldırıldı değilse) bazı eski önbelleğe girişleri dağıtma döndükten sonra tekrar edilebilir
  4. APC önbellek alanı eksik tarihinde sona OR sonra eski önbellek girişlerini kaldırmak olacak

Bu, yalnızca kullanıcı önbelleği için mümkündür.

apc.ini

apc.stat = "1" değiştirilmiş olup olmadığını belirlemek için her istek üzerine (kontrol) komut stat APC zorlar. Modifiye edilmiş ise derlemeye ve yeni önbelleğe alacaktır.

Bu ayar kapalı ise, APC genellikle dosyaları tekrar kontrol için APC zorlamak anlamına gelir, kontrol etmez, web sunucusu yeniden başlatılması veya önbelleği manuel olarak temizlenmesi gerekir gerekir. FastCGI web sunucu yapılandırmaları yeniden başlatma önbelleğini temizleyin unutmayın. Komut dosyaları nadiren değişiklik bir üretim sunucusuna, önemli bir performans artışı özürlü istatistiklerini elde edilebilir.

APC.php dosyası oluşturun

foreach(array('user','opcode','') as $v ){
    apc_clear_cache($v);
}

Tarayıcınızdan çalıştırın.