20 Ağustos 2013 Salı

Linux'te Java'nın Cryptography kütüphanesi yavaş çalışıyor

Kamu SM'nin Zaman Damgası console uygulaması çok yavaş çalışıyordu. Yavaşlığın sebebinin RHEL'de (6.4 versiyonu) kullanılan (aynı problem Debian'da (7.1 versiyonu) da gözlendi) random number generator'ın yavaş çalışmasından kaynaklandığı anlaşıldı.

Random number generator, sistemin entropy değerine göre sayı üretiyor. Entropy değeri küçükse önce entropy'yi yükseltip daha sonra sayı üretiyor. Bu arada; entropy, zaman, klavye ve mouse hareketleri, sıcaklı vb etmenlere göre oluşuyor. Aşağıdaki komutu kullanarak entropy'nin değerini görebilirsiniz.

cat /proc/sys/kernel/random/entropy_avail


Linux'taki rngd/rng-tools servisi bu değerin her zaman yüksek olmasını sağlıyor.

--------------------------------------------------------------------------------

RHEL ve türevi sistemlerde aşağıdaki komut ile bu servisi kurabilirsiniz
yum install rng-tools

Debian ve türevi sistemlerde aşağıdaki komut ile bu servisi kurabilirsiniz
apt-get install rng-tools

--------------------------------------------------------------------------------

RHEL ve türevi sistemlerde aşağıdaki komut ile servisi başlatabilirsiniz.
service rngd start

Debian ve türevi sistemlerde aşağıdaki komut ile servisi başlatabilirsiniz.
service rng-tools start

--------------------------------------------------------------------------------

Starting rngd: can’t open entropy source(tpm or intel/amd rng)
Maybe RNG device modules are not loaded

[FAILED]

RHEL ve türevi sistemlerde yukarıdaki gibi bir hata alıyorsanız ve servis başlamıyorsa "/etc/sysconfig/rngd" dosyasında aşağıdaki satırı ekleyiniz.
EXTRAOPTIONS=”-r /dev/urandom”

--------------------------------------------------------------------------------

Starting Hardware RNG entropy gatherer daemon: (Hardware RNG device inode not found)
/etc/init.d/rng-tools: Cannot find a hardware RNG device to use.

Debian ve türevi sistemlerde yukarıdaki gibi bir hata alıyorsanız ve servis başlamıyorsa "/etc/default/rng-tools" dosyasına aşağıdaki satırı eklemelisiniz
HRNGDEVICE=/dev/urandom

--------------------------------------------------------------------------------

rngd/rng-tools servisini başlatınız. Aşağıdaki komutla entropy değerine baktığınızda çok daha yüksek rakamlara çıktığını göreceksiniz.
cat /proc/sys/kernel/random/entropy_avail

Çözümün oluşturulmasında faydalanılan 2 sayfayı aşağıda yazıyorum.

http://stackoverflow.com/questions/137212/how-to-solve-performance-problem-with-java-securerandom

http://my.itwnik.com/2012/04/how-to-increase-linux-kernel-entropy/