28GB RAM ve 2GB takas özellikli sanal linux (Fedora 17) sunucum var. Sunucu, RAM'in çoğunu kullanacak şekilde ayarlanmış bir MySQL DB çalıştırıyor.
Bir süre çalıştıktan sonra sunucu, yayınlanmamış sayfaları değiştirmek için takas kullanmaya başlar. Swappiness varsayılan olarak 60 ve beklenen davranış bu iyi.
Garip olan şey, top / meminfo'daki sayının işlemlerden gelen bilgilerle uyuşmamasıdır. Yani sunucu şu numaraları bildiriyor:
/proc/meminfo:
SwapCached: 24588 kB
SwapTotal: 2097148 kB
SwapFree: 865912 kB
top:
Mem: 28189800k total, 27583776k used, 606024k free, 163452k buffers
Swap: 2097148k total, 1231512k used, 865636k free, 6554356k cached
Https://serverfault.com/a/423603/98204 adresinden komut dosyasını kullanırsam makul sayıları (bash'es, systemd, vb. İle değiştirilen birkaç MB) ve MySQL'den büyük bir ayırma rapor eder (çok sayıda çıkış satırını atladım) ):
892 [2442] qmgr -l -t fifo -u
896 [2412] /usr/libexec/postfix/master
904 [28382] mysql -u root
976 [27559] -bash
984 [27637] -bash
992 [27931] SCREEN
1000 [27932] /bin/bash
1192 [27558] sshd: admin@pts/0
1196 [27556] sshd: admin [priv]
1244 [1] /usr/lib/systemd/systemd
9444 [26626] /usr/bin/perl /bin/innotop
413852 [31039] /usr/libexec/mysqld --basedir=/usr --datadir=/data/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/data/mysql/err --open-files-limit=8192 --pid-file=/data/mysql/pid --socket=/data/mysql/mysql.sock --port=3306
449264 Total Swap Used
Komut dosyası çıktısını doğru alırsam toplam takas kullanımı 449264K = ca olmalıdır. Ca kullanarak mysql ile 440MB. Takasın% 90'ı.
Soru, bunun neden üst ve meminfo sayılarından çok farklı olduğudur? Tüm işlemlerden takas kullanımlarını toplamak yerine, gerçekte ne olduğunu görmek için takas bilgilerinin nasıl "dökülmesinin" bir yolu var mı?
Sorunu analiz ederken farklı fikirler buldum ama hepsi yanlış görünüyor:
- Komut dosyası çıktısı KB cinsinden değil. 512 veya 4KB birimlerde olsa bile eşleşmez. Aslında oran (1200: 440) "garip" sayı olan yaklaşık 3: 1'dir.
- Https://serverfault.com/a/477664/98204'te belirtildiği gibi takasta bazı işlemler arasında paylaşılan bazı sayfalar var . Bu doğruysa, bu şekilde kullanılan gerçek bellek sayısını nasıl bulabilirim? Yani cca 800MB fark yaratması gerekecek. Ve bu senaryoda bu doğru gelmiyor.
- Takasta zaten bitmiş işlemler tarafından kullanılan bazı "eski" sayfalar vardır. Bu "serbest" takasın ne kadar olduğunu öğrenebilseydim.
- Takasta, belleğe geri takılan ve RAM'de değişmemesi ve /server//a/100636/98204'te belirtildiği gibi tekrar takas edilmesi gerektiğinde takas edilen sayfalar vardır . Ancak SwapCached değeri yalnızca 24 MB'dir.
Garip olan şey, betiğin toplam çıktısı kabaca aynı iken takas kullanımının yavaşça artmasıdır. Son 3 günde kullanılan takas, 1100MB'den 1230MB'a yükselirken, toplam 430MB'den 449MB'ye (yaklaşık) yükseldi.
Sunucunun yeterli boş (mümkün) RAM'i var, bu yüzden sadece takas kapatıp tekrar açabiliyorum. Veya swapiness'i 0 olarak ayarlayabilirim, böylece takas sadece başka bir yol olmadığında kullanılır. Ancak sorunu çözmek veya en azından bunun nedeninin ne olduğunu öğrenmek istiyorum.