这两天刚好做PHP-FPM的内存优化,在查看PHP-FPM内存使用情况时发现locale-archive占用内存96M,该文件为语言,环境,字体相关的索引文件,由于很多语言无用,所以删除以压榨内存,凡setlocale的程序都会将locale-archive文件mmap到内存当中
内存使用细节
[root@AY14070313210045657aZ ~]# pmap -d `pidof php-fpm|awk '{print $$1}'`
7124: php-fpm: pool www
Address Kbytes Mode Offset Device Mapping
0000000000400000 11028 r-x-- 0000000000000000 0ca:00001 php-fpm
00000000010c5000 116 rw--- 0000000000ac5000 0ca:00001 php-fpm
....省略
00007f033ea1a000 64 r-x-- 0000000000000000 0ca:00001 libGB.so
00007f033ea2a000 2044 ----- 0000000000010000 0ca:00001 libGB.so
00007f033ec29000 4 r---- 000000000000f000 0ca:00001 libGB.so
00007f033ec2a000 4 rw--- 0000000000010000 0ca:00001 libGB.so
00007f033ec2b000 12 r-x-- 0000000000000000 0ca:00001 EUC-CN.so
00007f033ec2e000 2044 ----- 0000000000003000 0ca:00001 EUC-CN.so
00007f033ee2d000 4 r---- 0000000000002000 0ca:00001 EUC-CN.so
00007f033ee2e000 4 rw--- 0000000000003000 0ca:00001 EUC-CN.so
00007f033ee2f000 96832 r---- 0000000000000000 0ca:00001 locale-archive
00007f0344cbf000 48 r-x-- 0000000000000000 0ca:00001 libnss_files-2.12.so
00007f0344ccb000 2048 ----- 000000000000c000 0ca:00001 libnss_files-2.12.so
00007f0344ecb000 4 r---- 000000000000c000 0ca:00001 libnss_files-2.12.so
00007f0344ecc000 4 rw--- 000000000000d000 0ca:00001 libnss_files-2.12.so
00007f0344ecd000 28 r-x-- 0000000000000000 0ca:00001 pdo_mysql.so
00007f0344ed4000 2044 ----- 0000000000007000 0ca:00001 pdo_mysql.so
00007f03450d3000 4 rw--- 0000000000006000 0ca:00001 pdo_mysql.so
进行相应调整(此处请酌情考虑应用需要的)
###重命名该文件###
[root@ipython ~]# mv /usr/lib/locale/locale-archive /usr/lib/locale/locale-archive.bak
###重新添加语言支持###
[root@ipython ~]# localedef -i en_US -f UTF-8 en_US.UTF-8
[root@ipython ~]# localedef -i zh_CN -f UTF-8 zh_CN.UTF-8
###可选中文支持###
[root@ipython ~]# localedef -i zh_CN -f GB2312 zh_CN
[root@ipython ~]# localedef -i zh_CN -f GB2312 zh_CN.GB2312
[root@ipython ~]# localedef -i zh_CN -f GBK zh_CN.GBK
###富中文支持(HK/TW/SG)####
[root@ipython ~]# localedef -f UTF-8 -i zh_HK zh_HK.UTF-8
[root@ipython ~]# localedef -f UTF-8 -i zh_TW zh_TW.UTF-8
[root@ipython ~]# localedef -f UTF-8 -i zh_SG zh_SG.UTF-8
####重启服务器,再查看使用情况####
[root@ipython ~]# pmap -d `pidof php-fpm|awk '{print $$1}'`|awk '/locale/'
00007f38d0717000 3104 r---- 0000000000000000 0ca:00001 locale-archive
###这样下来就小了不少了,如果需要保险点的方法可以使用以下命令###
[root@ipython ~]# localedef --list-archive |egrep -v ^"en_US|zh" |xargs localedef --delete-from-archive
[root@ipython ~]# mv -f /usr/lib/locale/locale-archive /usr/lib/locale/locale-archive.bak
[root@ipython ~]# build-locale-archive