Linux教程之nginx和php机能优化相干
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!一向以来都是在写hadoop,很少写nginx和php相干的器械了。网上绝年夜多半文章是优化linux体系参数,优化nginx,php的设置装备摆设参数等等,测验考试写个分歧视角的,跟详细技巧点关系太年夜的,重要是思绪。从编译装置nginx和php开端捋一下。
编译nginx和php一个最根本的准绳是,尽量编译更少的附加模块,nginx和php或许更早的apache,为了完成某项特定的功效,会将该功效已静态衔接库的情势包括在软件外面,在linux上面是.so后缀的文件。普通来讲,用户在configure阶段,可以本身选择--with-xxx或许--without-xxx来决议能否应用它供给的模块。为了便利,我们固然可以如许做,好比我们要在php外面应用curl的函数,就指定--with-curl=/usr/local/curl这类方法去configure。然则,除非这个模块是你必需应用的,不然就不要指定编译它。
准绳一:假如不须要这个模块,就不要编译它。
缘由是如许,当你启动nginx或许php过程的时刻,这些过程都邑翻开一切你所编译的这些静态衔接库,每一个静态链接库都邑占用linux体系的FD资本,这个用lsof是可以很清晰的看到的。异样,你的log文件也是会占用FD资本。
#lsof|grepnginxnginx14214nobodycwdDIR8,9409631623598/opt/modules/tengine/sbinnginx14214nobodyrtdDIR8,240962/nginx14214nobodytxtREG8,9311409331623599/opt/modules/tengine/sbin/nginxnginx14214nobodymemREG8,214360065301/lib64/ld-2.5.songinx14214nobodymemREG8,2172230465305/lib64/libc-2.5.songinx14214nobodymemREG8,212998465356/lib64/libpcre.so.0.0.1nginx14214nobodymemREG8,214582465350/lib64/libpthread-2.5.songinx14214nobodymemREG8,21815265349/lib64/libutil-2.5.songinx14214nobodymemREG8,261513665315/lib64/libm-2.5.songinx14214nobodymemREG8,28554465591/lib64/libz.so.1.2.3nginx14214nobodymemREG8,24860065346/lib64/libcrypt-2.5.songinx14214nobodymemREG8,29273665327/lib64/libresolv-2.5.songinx14214nobodymemREG8,312624164146256/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.songinx14214nobodymemREG8,211435265623/lib64/libnsl-2.5.songinx14214nobodymemREG8,22336065329/lib64/libdl-2.5.songinx14214nobodymemREG8,31209454245561/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/nginx/nginx.songinx14214nobodyDELREG0,91301143625/dev/zeronginx14214nobodymemREG8,25388065306/lib64/libnss_files-2.5.songinx14214nobody0uCHR1,31670/dev/nullnginx14214nobody1uCHR1,31670/dev/nullnginx14214nobody2wREG8,91961445698331719533/opt/modules/tengine/logs/error.lognginx14214nobody3wREG8,17073587637/data/logs/error5/access.lognginx14214nobody5uunix0xffff81010f64ec401596291379socketnginx14214nobody7uunix0xffff8101861994801596291382socketnginx14214nobody9uunix0xffff81010886eec01596291384socketnginx14214nobody10uIPv41301143624TCP*:http(LISTEN)nginx14214nobody11wREG8,17090475700/data/logs/errorv/access.lognginx14214nobody12wREG8,1701507590/data/logs/errorcode/access.lognginx14214nobody13wREG8,17073662516/data/logs/mobile/access.lognginx14214nobody14wREG8,9861289491231719506/opt/modules/tengine/logs/access.lognginx14214nobody15wREG8,91961445698331719533/opt/modules/tengine/logs/error.lognginx14214nobody16uunix0xffff81010886fc801596291389socketnginx14214nobody17uunix0xffff8101185cda001596291378socketnginx14214nobody18r00000,1101596291381eventpollnginx14214nobody19u00000,70356anon_inodenginx14214nobody20uunix0xffff81010886f4401596291391socketnginx14214nobody21uunix0xffff81011b1d3a001596291393socketnginx14214nobody23uunix0xffff81013d2c5d001596291396socketnginx14214nobody25uunix0xffff81013d2c57801596291398socketnginx14214nobody27uunix0xffff81013d2c52001596291402socketnginx14214nobody29uunix0xffff81013d2c4c801596291404socketnginx14214nobody31uunix0xffff81013d2c47001596291406socketnginx14214nobody33uunix0xffff81013d2c41801596291408socketnginx14214nobody35uunix0xffff8102020a39401596291410socketnginx14214nobody37uunix0xffff8102020a33c01596291412socketnginx14214nobody39uunix0xffff8102020a2e401596291415socketnginx14215nobodycwdDIR8,9409631623598/opt/modules/tengine/sbinnginx14215nobodyrtdDIR8,240962/nginx14215nobodytxtREG8,9311409331623599/opt/modules/tengine/sbin/nginxnginx14215nobodymemREG8,214360065301/lib64/ld-2.5.songinx14215nobodymemREG8,2172230465305/lib64/libc-2.5.songinx14215nobodymemREG8,212998465356/lib64/libpcre.so.0.0.1nginx14215nobodymemREG8,214582465350/lib64/libpthread-2.5.songinx14215nobodymemREG8,21815265349/lib64/libutil-2.5.songinx14215nobodymemREG8,261513665315/lib64/libm-2.5.songinx14215nobodymemREG8,28554465591/lib64/libz.so.1.2.3nginx14215nobodymemREG8,24860065346/lib64/libcrypt-2.5.songinx14215nobodymemREG8,29273665327/lib64/libresolv-2.5.songinx14215nobodymemREG8,312624164146256/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.songinx14215nobodymemREG8,211435265623/lib64/libnsl-2.5.songinx14215nobodymemREG8,22336065329/lib64/libdl-2.5.songinx14215nobodymemREG8,31209454245561/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/nginx/nginx.songinx14215nobodyDELREG0,91301143625/dev/zeronginx14215nobodymemREG8,25388065306/lib64/libnss_files-2.5.songinx14215nobody0uCHR1,31670/dev/nullnginx14215nobody1uCHR1,31670/dev/nullnginx14215nobody2wREG8,91961445698331719533/opt/modules/tengine/logs/error.lognginx14215nobody3wREG8,17073587637/data/logs/error5/access.lognginx14215nobody5uunix0xffff8101861994801596291382socketnginx14215nobody7uunix0xffff81010886eec01596291384socketnginx14215nobody9uunix0xffff81010886fc801596291389socketnginx14215nobody10uIPv41301143624TCP*:http(LISTEN)nginx14215nobody11wREG8,17090475700/data/logs/errorv/access.lognginx14215nobody12wREG8,1701507590/data/logs/errorcode/access.lognginx14215nobody13wREG8,17073662516/data/logs/mobile/access.lognginx14215nobody14wREG8,9861289491231719506/opt/modules/tengine/logs/access.lognginx14215nobody15wREG8,91961445698331719533/opt/modules/tengine/logs/error.lognginx14215nobody16uunix0xffff8101185cdcc01596291377socketnginx14215nobody17uunix0xffff81010886f4401596291391socketnginx14215nobody18uunix0xffff81011b1d3a001596291393socketnginx14215nobody19uunix0xffff81010886ec001596291380socketnginx14215nobody20r00000,1101596291386eventpollnginx14215nobody21u00000,70356anon_inodenginx14215nobody23uunix0xffff81013d2c5d001596291396socketnginx14215nobody25uunix0xffff81013d2c57801596291398socketnginx14215nobody27uunix0xffff81013d2c52001596291402socketnginx14215nobody29uunix0xffff81013d2c4c801596291404socketnginx14215nobody31uunix0xffff81013d2c47001596291406socketnginx14215nobody33uunix0xffff81013d2c41801596291408socketnginx14215nobody35uunix0xffff8102020a39401596291410socketnginx14215nobody37uunix0xffff8102020a33c01596291412socketnginx14215nobody39uunix0xffff8102020a2e401596291415socket第二列是过程PID,我这里列了nginx的两个过程,你加载的静态链接库越多,他占用的FD和内存就会越多,而TCP/IP自己每一个衔接我记得是会占用1.5k阁下的内存。所以,尽量少的加载静态衔接库,可以将更多的内存和cpu资本让给tcp/ip衔接。
所以,除必需要用的,尽量少的指定configure参数是可以进步一些机能的。例如nginx的gzip参数,假如你不是碰到特殊年夜的带宽瓶颈没法超越,就尽可能不要指定应用gzip,他可以减小带宽占用,但同时在高并发情形下会增年夜CPU的占用,gzip算法挺费CPU时光的。同理,不须要rewrite,就不要加pcre参数,不须要mhash,就不要给php指定mhash参数,以此类推。
准绳二:尽量应用缓存体系
不管是nginx的缓存,照样php的缓存,或许memcached或许redis,除非你碰到客户端刷新成绩,不然不要谢绝缓存机制,这在机能优化里长短常有效的,这有点相似于代码重用。代码重用会削减法式员的任务量,而缓存会削减办事器的任务量,关于这方面任何人都没有贰言吧。在我的现实任务中,因为不触及前端任务,所以不怎样去关怀memcached和redis。然则我也会尽量的应用缓存,特殊是php的缓存,我重要应用的就是eaccelerator。做一个比较,在不应用eaccelerator的情形下,php开256过程,并发量到达1000多的时刻,CPU就曾经跑满了,nginx会报出大批的errorlog。而应用了eaccelerator,php并发量到达2000或许更高,cpu也只跑到了一半多一些,nginx还没有报出errorlog。并且有许多优良的缓存,除eaccelerator以外,还有xcache等。
准绳三:尽量应用面向进程,而不是面向对象。
其实我这么说能够有点老土了,然则面向进程切实其实要比面向对象的方法要履行效力高。固然我不否定面向对象在代码重用和构建年夜型体系上的优势。面向对象的方法要比面向进程在php说明器外面多了好几步流程,而用虚拟机就更慢了。虽然这类差别能够只要几十个cpu微秒时光,然则累计误差是很恐怖的一件事。
准绳四:好的算法和坏的算法。
关于不是请求特严厉的网站来讲,其实算法无分利害,只需能处理成绩就行,然则就像准绳三外面说到的积累误差。一个欠好的算法带来的常常是全体效力的低能。零丁跑一个几百几千个数的冒泡和快排的效力差异,能够相差也不外是几个毫秒,十几个毫秒。然则几万个呢,几十万个呢?晚期去选择好的算法和书写作风,会让前面的任务轻松许多,代码重构的任务真的又耗精神又耗时光。
准绳五:学会用监控。
监控的目标不单单是看办事器是否是还在世,这个在世包含办事器在世,也包含下面的办事还在世,这个基本就不是监控的终究目标。办事器和办事是否是还在世,不须要你去监控。大众的眼睛是雪亮的,办事用不了的话,德律风早就被打爆了。监控的终究目标是剖析出机能的瓶颈地点,然后想方法去调优。不管是图形化的cacti,ganglia,zabbix照样linux上面敕令行的iftop,iostat,vmstat,lsof等等,将每台办事器的硬件资本应用率最年夜化,才是真实的目的地点。我们究竟不是国企央企当局机关,可以征收下去的横征暴敛买一堆oracle,emc在那摆着欣赏把玩,剩下的回扣甩给二奶三奶。
固然,这个监控也不单单是监控拜访量和负载的关系,许多都可以监控,也能够经由过程前后真个技巧来完成,好比在nginx设置装备摆设外面加上一个参数,可以监控到页面的要求呼应时光,或许经由过程cookie和javascript,可以监控到客户真个现实加载时光等等。不外这些就须要本身写代码完成了。
没事瞎写的,良久不弄web相干的器械了,写起来感到挺怪的。恩,我开端挂臭袜子了。
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们! 如果你想深入学习Linux,看不懂因为文档实在是太难了。写的最好的、最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。 其中不乏很多IT精英的心血。我们学透以后更可以做成自己的OS!? 在系统检测不到与Linux兼容的显卡,那么此次安装就可能不支持图形化界面安装,而只能用文本模式安装等等。 我学习Linux的心得体会 ,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。 清楚了解网络的基础知识,特别是在Linux下应用知识,如接入internet等等。 熟读写基础知识,学得会不如学得牢。 写学习日记,这是学习历程的见证,同时我坚持认为是增强学习信念的法宝。 最好先搜寻一下论坛是否有您需要的文章。这样可以获得事半功倍的效果。
页:
[1]