opcache

Php 5.5 Opcache Nedir? (ve overflow problemi)

Opcache Nedir?

PHP 5.5 üzerinde hazır halde gelen opcache temel olarak, filesystem üzerinde bulunan php dosyalarını her requestte okumamak için tasarlanmış bir otomatik low level cache mekanizmasıdır. Php nin 5.5 sürümünü kullanıyorsanız, ve özellikle kapatmadıysanız, muhtemelen siz de bu özelliği kullanabilirsiniz / veya zaten bilmeden kullanıyorsunuzdur.

PHP interpreted bir dil olduğu için, (yazılan kodlar, çalışma anında makine diline çevrildiğinden) ilgili dosyalar normalde her çalıştırdığınızda veya sitenize her request geldiğinizde tekrar tekrar bu dosyaları load eder. Düşünün bir siteniz var ve anasayfasını ekrana basmak için 10 adet php dosyasına ihtiyacınız var. Sitenize de aynı anda(örneğin 1 saniye içinde) 100 kişi giriyor. Opcache olmadığında, bu 10 dosyayı her 100 giriş için toplamda diskten 1000 kere okuma işlemi yapması gerekiyor. Halbuki opcache üzerinde bir ayar ile bir dosyayı okuduğunda 10 saniye boyunca cachelemesini belirtebilirsinz. Bu demektir ki, 100 kişi x 10 saniye x 10 dosya = sisteminizin 10.000 kere okuma yapması gereken halde, sadece 10 kere diskten okuma işlemi yapacaksınız. Tabi, yapacağınız bir dosya değişikliğinin sitenize yansıması için bu sefer 10 saniye beklemek zorunda kalacağınızı da hatırlatmak isteriz.

Default değerleri görebileceğiniz tüm opcacahe konfigürasyon listesi için buyrunuz : http://php.net/manual/en/opcache.configuration.php

Opcache ile tam olarak ne kazandık? 

Tam olarak io kazandık, (diskten okuma yapma işlemlerimizi, sitemizin yoğunluğuna göre %100 e yaklaşan bir değere kadar azaltabiliriz.)

Dezavantajları neler?

Developer ortamında, insan bir şeyi denerken hemen dosyayı kaydedip yaptığı değişikliği anında  görmek isteyebilir. Hatta refleks olarak böyle davranır yazılımcılar. Bu durumda, local ortam için bir miktar handikap oluşturabilir, veya en güzeli, local ortam için opcache i disable etmek olabilir. (php.ini içinde opcache.enable=0 yazacaksınız) Aksi halde zırt pırt fpm restart etmek zorunda kalabilirsiniz.

Başka başka?

Opcache; büyük bir projede, aynı dosyalar ile çok fazla takıldıktan sonra, yazılımınızın yeni bir versiyonuna ait benzer sayıda çok dosya daha geldiğinde, ve artık bu dosyaları kullanmaya başladığında, sanırım eski dosyaları halen aklında tutmaya çalışmasından dolayı, yeni dosyalarınızı okurken io’su sanki opcache açık değilmişçesine artmaya ve overflow olmaya başlıyor. (bu da load vb konularında probleme sebebiyet verebiliyor. ). Çalışmamazlık durumu oluşmuyor ancak code ve dosya sayısı büyüklüğünüze göre sizi olumsuz etkiliyor. Bu noktada codebase üzerinde çok fazla değişme/yeni release yayına alma gibi aksiyonlarda php-fpm inizi restart etmenizde yarar var. (reload kurtarmıyor malesef)

class_exist ve spl_autoload

Eğer spl_autoload ile bir autoloader belirttiyseniz, daha sonra kodunuzun herhangi bir class_exist() ile o sınıfın olup olmadığını kontrol ediyorsanız, zaten kontrol etme işlemiyle birlikte sınıfı load etmiş oluyorsunuz.

Bunu http://www.php.net/manual/en/function.spl-autoload-register.php#95456 linkindeki yazıdan da görebilirsiniz.

Bir örnek de vermeye çalışacağım ilerleyen zamanlarda.

Mandrill mail gönderim servisi ( ve ek olarak mandrill kuponu)

Mandrill Nedir?

Mandrill, cloud tabanlı bir email gönderim hizmetidir. API’lerini kullanarak milisaniyeler seviyesinde mail gönderebilirsiniz.

Nasıl kullanılır?

https://mandrillapp.com/api/docs/ bağlantısına gidip, Restful apilerini kullanmaya başlayabilirsiniz.

Niye Böyle bir mail hizmeti kullanayım?

Eğer, mail gönderimi ve mail hizmetleri , yapacağınız işin asıl konusu değilse ve/veya Mail gönderimi konularında kendi mail hizmetinizin imkanları dahilinde bir çok iş sizin üzerinize kalıyorsa, burada mandrill gibi bir mail gönderim hizmetini tercih edebilirsiniz.

Mandrill’in Avantajları neler?

Mandrill üzerinde Hesap oluşturduktan sonra, email bazlı multi tanent yapılar için (örneğin bir web sitesi yapan ajans iseniz, her müşterinizin sitesi için aynı email hizmetini veriyorsanız) her müşterinize ayrı hesaplar açmak yerine , kendinize ait bir hesap üzerinden onlara ait alt hesaplar oluşturup, ayrıca yönetebilmektesiniz. Spam, Hard-bounce, soft-bounce, vb.. gibi mail gönderilememesi durumlarını kapsayabilecek çözümler geliştirebilirsiniz. Bunları otomatize edip, mail başarımınızı yükseklere çıkarabilirsiniz.

Mail içeriklerinde Mandrill’in kendi geliştirdiği bir template dilini, veya da dünya çapında kullanılan handlebars’ı tercih edebilirsiniz. Böylece mail içeriklerini de alıcıya özel olarak dinamik hale getirme imkanınız bulunuyor.

Mandrill’de de olan klasik özellikler?

Raporlama, mail kaç kere açıldı/okundu, vırt zırt. Klasik raporlamalar, falan filan..

Dezavantajları Neler?

Çok dezavantaj mı bilemem, ancak arayüz vb konusu yerine, API konusuna ağırlık verildiğini görüyoruz. Ayrıca zaten mandrill’in daha fonksiyonel ve arayüzle donatılmış hali de yine aynı firmaya ait olan MailChimp.

Spamı çok kaçırırsanız, bir de reputasyonunuz düşüp saatlik mail gönderim limitiniz inanılmaz düşük seviyelere (10-20 gibi) gelebiliyor. Bunun da çeşitli uyarıları geliyor, ancak burada önemli olan sizin bu spam vb senaryolarınızda kurgunuzu belirlemiş olmanız gerekiyor.

 

Mandrill Kupon Kodu : (6 ay için +50000 aylık mail gönderimi)

kayıt olduğunuzda aylık 12000 mail gönderim hakkı tanıyan mandrill, kayıt olurken girebileceğiniz aşağıdaki kupon kodu ile ilk 6 ay için +50000 gönderim hakkı daha veriyor.
Mandrill Kupon Kodu : PRAGMATIC

 

Güle güle kullanın.

 

konsoldan mysql root sifresini sifirlamak

Özet olarak bu işlem için, konsoldan mysql şifresini sıfırlamamız icap ettiğinde mysqli yetkisiz bir şekilde başlatıp, işlemlerimizi yapıp sonra tekrar başlatarak işlemlerimizi tamamlamış olacağız.

İzlenmesi gereken adımlar :

Mysql’i durdurun.

/etc/init.d/mysqld stop

Şimdi, skip-grant özelliği ile tekrar başlatıyoruz:

mysqld_safe --skip-grant-tables

Şimdi Mysql’e passwordsüz bağlanacağız. (ayrı bir konsolda)

mysql -u root

Aşağıdaki komutları sırası ile verelim ve yeni şifremizi belirleyelim.

mysql> use mysql;
mysql> update user set password=PASSWORD("yeni_sifremiz") where User='root';
mysql> flush privileges;
mysql> quit;

Mysql’i yeniden durduralım

/etc/init.d/mysqld stop

Şimdi de normal bir şekilde başlatalım

/etc/init.d/mysqld start

İşlem tamamdır 🙂

Diagram Designer for Mac OSX – LibreOffice Draw

MacOSX kullanıcıysanız, bir diagram designer edinmek pek de kolay olmuyor malesef. Ücretli bir şeyler almak http://maggiesbigadventure.com/pj-dating-deaf/ niyetinde pek olmadığım bu başlık ile ilgili çözümümü, ücretsiz bir yazılım olan LibreOffice Draw ile çözdüm. Tabi onu bulana kadar, exe çalıştırabilen toollari tüm window üretme araçlarımı değiştirmek, vb gibi çözümler denemeye çalıştım ancak, çok ucube programlar için 1 ton iş yapıp bir de yaptığım değişiklikleri geri almak durumunda kaldım.

Libre office online dating service sex draw ile, şu an hem network, hem sunucu, hem topoloji, hem UML, hem de akış diagramı (akış diagramı tasarlamak biraz daha zor, diğer programlara göre http://signaturetechavl.com/activities-for-singles-in-va-at/ ancak o da oluyor) ihtiyaçlarımızı karşılayabildim.

Tavsiye http://serenebalance.org/but-blind-singles/ edecek kadar da sevebildim. MacOSX için Libre office’i indirdiğinizde draw da zaten içerisinde gelmekte. https://tr.libreoffice.org/download/ linkinden işletim sisteminize göre seçip (otomatik seçiyor olması lazım zaten) indirip kurabilirsiniz.