您现在的位置是:首页 > 技术教程 正文

wordpress 占用内存 CPU过高的解决方案

admin 阅读: 2024-03-17
后台-插件-广告管理-内容页头部广告(手机)

(ChatGpt的回复再结合其它资料整理,有任何意见欢迎指出)WordPress占用内存过高可能由多种因素引起,以下是一些可能的原因和解决方法。总之,为了解决WordPress占用内存过高的问题,您需要对主题,插件,数据库,缓存,PHP版本和配置以及服务器资源进行全面的审核和优化。

 

​​​一、程序、主题、插件

1、程序配置

  1. // 更多内存
  2. define('WP_MEMORY_LIMIT', '64M');
  3. // 更多更多的内存
  4. define('WP_MEMORY_LIMIT', '96M');
  5. // 又好又多的内存 ?
  6. define('WP_MEMORY_LIMIT', '128M');
  7. 假如呈现空白页面,阐明扩展容量过大,体系无法接受,内存康复32MB。 祝好运

2、程序死循环、程序代码优化。程序执行可能超时,开慢日志一般就能确定具体函数或文件。

3、WordPress的主题和插件是最常见的内存占用原因。确保使用的主题和插件是最新版本,并且只使用必需的插件。禁用不需要的插件,并逐个启用它们,以确定哪个插件占用了最多的内存。

4、尽量少使占用资源较大的插件,特别是All in One SEO,Broken Link Checker,Yet Another Related Posts Plugin,NextGen Gallery最好不要使用。另外一些没有启用的插件要把插件文件都全部删除。适当使用一些优惠插件,如数据库优化Optimize Db和WP super cache 自动缓存插件。

5、用Alex Rabe开发的 WP-Memory-Usage插件来了解WordPress中的内存运用状况。Heiko Rabe开发的WordPress System Health插件会为咱们供给更全面的信息

6、查找可能占用资源的插件:通过禁用某个插件而表现得更好,如该项功能是必须的,看看您是否可以找到提供相同功能的替代插件 。

7、消除 Gravatar 评论页面加载延迟
Gravatars 很棒。它们让您的用户展示自己的个性,增添真实感,而且很多人都可以通过他们独特的头像轻松识别。但是,如果您收到大量评论,在您的网站上使用它们就会出现问题。每条评论都会向 Gravatar 的服务器发送一个请求。因此,如果您在一个页面上有很多评论,那么您将有很多请求来回传输,从而使该页面加载速度变慢。使用 FV Gravatar Cache 插件消除这种情况。FV Gravatar Cache 将在本地缓存这些图像,这将减少具有许多评论的页面的加载时间……

8、只使用你绝对需要的热门插件
注意:在停用和删除插件之前,请查找任何卸载功能或自述文件。某些插件具有特殊的卸载程序,可以将它们从您的站点中完全删除。

9、中断WordPress与官网的联系:将下面代码加到当前主题函数模板文件functions.php中

  1. add_filter('automatic_updater_disabled','__return_true'); // 彻底关闭自动更新
  2. remove_action('init','wp_schedule_update_checks'); // 关闭更新检查定时作业
  3. wp_clear_scheduled_hook('wp_version_check'); // 移除已有的版本检查定时作业
  4. wp_clear_scheduled_hook('wp_update_plugins'); // 移除已有的插件更新定时作业
  5. wp_clear_scheduled_hook('wp_update_themes'); // 移除已有的主题更新定时作业
  6. wp_clear_scheduled_hook('wp_maybe_auto_update'); // 移除已有的自动更新定时作业
  7. remove_action('admin_init','_maybe_update_core'); // 移除后台内核更新检查
  8. remove_action('load-plugins.php','wp_update_plugins'); // 移除后台插件更新检查
  9. remove_action('load-update.php','wp_update_plugins');
  10. remove_action('load-update-core.php','wp_update_plugins');
  11. remove_action('admin_init','_maybe_update_plugins');
  12. remove_action('load-themes.php','wp_update_themes'); // 移除后台主题更新检查
  13. remove_action('load-update.php','wp_update_themes');
  14. remove_action('load-update-core.php','wp_update_themes');
  15. remove_action('admin_init','_maybe_update_themes');

二、数据库

1、数据库的大小和性能也可能导致WordPress占用过高的内存。确保优化数据库,删除不必要的数据和记录,并使用缓存插件来减少对数据库的访问。

2、配置数据库

三、缓存: 如果您的网站没有启用缓存,则每次加载页面时都会生成新的HTML代码,这可能会导致占用过高的内存。启用缓存插件可以减少对服务器的请求,从而降低内存占用。

1、一般来说 wordpress 程序中安装opcache、memcached 这两个扩展组件的其中之一即可,如果程序不要求,别的都不用安装。如果是非 wordpress 程序,只安装 opcache 这个缓存扩展。

2、502这个错误:这样频繁报错完全是因为我在拓展中开启了两个缓存器opcache和Memcached,而Memcached又没进行设置,于是出现了某种冲突,导致频繁502。我利用水煮鱼的插件开启了Memcached,删除了opcache拓展,网站瞬间满血复活

3、使用缓存插件:缓存插件将有助于更快地加载最近提供的内容。一般来说,当有人访问您的 WordPress 站点时,他们的浏览器会获取 HTML 文件,这需要运行 PHP 脚本或从 WordPress 数据库中获取数据。好在如今大多数浏览器都足够智能,可以通过浏览器保留访问过的站点的“记忆”。这是缓存。WordPress 插件将保存提供的 HTML 文件,以便浏览器可以更快地加载它们,而无需运行脚本或从数据库中获取信息。

一些流行 WP 缓存插件有:W3 Total Cache。WP Super Cache。WP Rocket。Comet Cache。WP Fastest Cache

四、PHP版本和配置

1、使用旧版本的PHP可能会导致内存占用过高。确保您正在使用最新版本的PHP,并优化php.ini文件以最大程度地减少内存使用。

2、安装了多个PHP版本,甚至把 php 5.3、5.4、7.0、7.3 等全都安装上了,这会严重增加系统负载和内存使用率。建议只保留一个,卸载掉其它版本。

2、php-fpm占用大量cpu使用率,导致php挂起

  1. pm = dynamic
  2. pm.max_children = 20
  3. pm.start_servers = 5
  4. pm.min_spare_servers = 2
  5. pm.max_spare_servers = 10
  6. pm.max_requests = 300

php-fpm 的相关参数
pm:表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态),默认为dynamic。
pm.max_children:静态方式下开启的php-fpm进程数量。
pm.start_servers:动态方式下的起始php-fpm进程数量。
pm.min_spare_servers:动态方式下的最小php-fpm进程数量。
pm.max_spare_servers:动态方式下的最大php-fpm进程数量。

区别:如果pm设置为 static,那么其实只有 pm.max_children 这个参数生效。系统会开启设置数量的 php-fpm 进程。如果pm设置为 dynamic,那么 pm.max_children 参数失效,后面 3 个参数生效。系统会在 php-fpm 运行开始的时候启动 pm.start_servers 个 php-fpm 进程,然后根据系统的需求动态在 pm.min_spare_servers 和 pm.max_spare_servers 之间调整 php-fpm 进程数。

对于内存大的服务器(8G)以上,指定静态的max_children实际上更为妥当,因为这样不需要进行额外的进程数目控制,会提高效率。对于小内存的服务器,动态方式会结束掉多余的进程,可以回收释放一些内存。

3、登录宝塔面板——软件管理——PHP设置——性能调整,按照上方的线路,找到相应的PHP,进行调整即可。

注意重新配置之后要重启服务器。

五、服务器资源、硬件问题

1、如果您的服务器资源不足,则可能会导致WordPress占用过高的内存。升级到更高级别的服务器,或考虑使用云托管服务,例如AWS或Google Cloud,以确保有足够的资源来处理您的网站。

wordpress网站对主机要求比一般的网站程序要高的多,如你使用的是服务器至少需要2核心,2G内存起步的配置,单核容易在突发情况时网站很慢或卡死,如你使用较多插件(8个以上),特别是使用WooCommerce系列的插件,那你的服务器配置至少在3核心、4G内存以上配置,如乐道主机美国服务器,3核心,6G内存,80G SSD硬盘,100M宽带峰值速度,CN2线路,200元/月,详细了解,适合wordpress程序的外贸网站使用。也可使用虚拟主机,虚拟主机可用CPU相当于2核心的服务器,价格还很便宜,如1G香港虚拟主机,仅需170元/年,买2年送1年,相当于2核心的服务器,跑wordpress无压力。

2、php-fpm日志:

日志文件:/usr/local/php/var/log/php-fpm.log

多个版本管理php-fpm :/etc/init.d/php-fpm8.1 reload 

单个版本管理:lnmp php-fpm reload

3、lnmp日志:不要使用rm命令直接删除!一般系统日志在/var/log/ 下,可以ls -lh /var/log/ 看一下占用的大小。可以使用cat /dev/null > logfile 进行日志删除。

cat /dev/null > /var/log/syslog
cat /dev/null > /var/adm/sylog
cat /dev/null > /var/log/wtmp
cat /dev/null > /var/log/btmp
cat /dev/null > /var/log/secure
cat /dev/null > /var/log/maillog
cat /dev/null > /var/log/messages
cat /dev/null > /var/log/maillog
cat /dev/null > /var/log/mail.info


如果是采用LNMP一键安装包安装的环境,一下地方可能还会有日志:
mysql日志:https://www.vpser.net/manage/delete-mysql-mysql-bin-0000-logs.html
nginx日志:https://bbs.vpser.net/thread-1811-1-1.html

如果仍不能确定具体磁盘的占用情况,可以使用 du -sh 命令,从/ 根目录开始挨个目录进行查找。

4、硬件问题:top 命令,主要查看load average(平均负载),例如:这是一个4核8G内存的服务器的显示

  1分钟平均负载:2.32;

  5分钟平均负载:2.18;

  15分钟平均负载:3.95;

  load average 中3个数的含义,如果是1核cpu,那么不能超过1,4核那么就不能超过4,15分钟可以代表长期,5分钟代表中期,1分钟代表短期,所以先看15分钟。可以说它现在的平均负载接近了它的cpu总核数:4;需要考虑服务器配置升级!

5、woocommerce建站推荐服务器配置:

1)CPU:用高主频的,3Ghz+,多花不了你多少钱,但对后台速度有能感知的提升,双核起步

2)内存:4G起步,每G内存大致能支撑一个常规WC站短时间内5个add to cart + checkout session,考虑系统使用,4G内存能支撑的session小于20个,跑不满最好,当作冗余,跑不满扩展不迟

3)硬盘:用高性能SSD,NVME架构的最好,会有很明显的基础性能优势,磁盘IO容易被普通站长忽视,建议查阅sysbench,试着去benchmark硬盘读写速度比较主机后再决定买哪个,容量优先考虑你的图片存储需要,图片存储需求大致可以这么算:产品数量 * 每个产品图片量(主题,详情图),站点不同差距很大,单个产品给至少10M图片空间(一般只多不少),1000款产品大致需要10G存储空间,建议你买3-4倍的硬盘空间,留出冗余,具体要多少,你自己可以再仔细算算

4)带宽:只能根据网站实际流量状况来动态规划,虽然WC站90%+的流量都会走CDN,但太小显然也不行,你可以选一个图片(大图)最多的产品页,把它的存储容量乘以5-10倍来起步

个人用过的最好的主机是GCP,不是最便宜的。不必一步到位,需要的时候扩展即可。

主机性能只是WC站点综合性能的一个部分,全局重要性可能不到20%(我的意思也绝不是说主机就不重要,千万别误会),是高性能WC站点的必要不充分条件,后续还有很多应用层面的优化要做,但如果主机能给你的avg load time -500ms,你就能省下很多时间做更高价值的事,而不是不得不去纠结很多收益小不得不做但很难做的优化。

六、使用 CDN:使用 CDN 可以将静态文件缓存在全球分布的服务器上,以提高网站的加载速度和减少服务器负载。

七、优化图片和媒体文件:将图片和媒体文件进行压缩,缩小文件大小,删除不必要的文件,以减少内容占用。

八、其它问题

1、wordpress 此站点遇到了致命错误:主题和插件更新导致的不兼容,建议直接恢复默认主题,停用插件观察,如果通过WP_DEBUG可以直接定位到问题,那么也可以根据错误提示找到问题所在,针对性的解决。

2、官方排错链接:FAQ Troubleshooting – WordPress.org Documentation

3、关闭文章撰写的定时发布功能及自动保存草稿问题。这几个功能可以通过修改wp-cron.php内的数据来实现,我们在里面添加下面代码即可

  1. define(‘DISABLE_WP_CRON’, true);
  2. define (‘WP_POST_REVISIONS’, 0);
  3. define(‘AUTOSAVE_INTERVAL’, 600);

4、通过修改robots.txt来限制搜索引擎蜘蛛不必要的站点文件。我们在里面添加下面代码即可:

  1. User-agent: *
  2. Crawl-delay: 10
  3. Allow: /wp-content/uploads/
  4. Disallow: /cgi-bin/
  5. Disallow: /wp-login.php
  6. Disallow: /wp-login.php*
  7. Disallow: /wp-register.php
  8. Disallow: /wp-register.php*
  9. Disallow: /xmlrpc.php
  10. Disallow: /template.html
  11. Disallow: /wp-admin/
  12. Disallow: /wp-includes/
  13. Disallow: /wp-content/plugins
  14. Disallow: /wp-content/themes
  15. Disallow: /page/
  16. Sitemap: https://www.wn789.com/sitemap.xml
  17. Sitemap: https://www.wn789.com/sitemap.html
  18. Sitemap: https://www.wn789.com/sitemap_baidu.xml

5、通过修改.htaccess来限制限制不必要的搜索引擎蜘蛛爬行。添加下面代码即可:

  1. RewriteEngine On
  2. RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
  3. RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR]
  4. RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
  5. RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
  6. RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
  7. RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]
  8. RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
  9. RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
  10. RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
  11. RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
  12. RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]
  13. RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
  14. RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
  15. RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
  16. RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
  17. RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]
  18. RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
  19. RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
  20. RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
  21. RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
  22. RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
  23. RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
  24. RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]
  25. RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]
  26. RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR]
  27. RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
  28. RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]
  29. RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
  30. RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]
  31. RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
  32. RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
  33. RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]
  34. RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]
  35. RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]
  36. RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
  37. RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
  38. RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
  39. RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
  40. RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]
  41. RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
  42. RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
  43. RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]
  44. RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]
  45. RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
  46. RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]
  47. RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
  48. RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
  49. RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
  50. RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
  51. RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
  52. RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
  53. RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
  54. RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
  55. RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
  56. RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
  57. RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]
  58. RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
  59. RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]
  60. RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]
  61. RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
  62. RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
  63. RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
  64. RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR]
  65. RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
  66. RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
  67. RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
  68. RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]
  69. RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR]
  70. RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
  71. RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
  72. RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
  73. RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
  74. RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
  75. RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
  76. RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
  77. RewriteCond %{HTTP_USER_AGENT} ^Zeus
  78. RewriteRule ^.* – [F,L]

6、mysql5.6的默认配置是不适合小型站点的,win的话在my.ini里修改、linux则在/etc/my.cnf里修改performance_schema_max_table_instances参数,有就修改,没有就追加:

  1. performance_schema_max_table_instances=400
  2. 如果找不到这个的话,直接在合适的地方加上 performance_schema = off 即可。
  3. 用于监控MySQL server在一个较低级别的运行过程中的资源消耗、资源等待等情况,关闭之后可以节省开销,不会使server的行为发生变化。
  4. table_definition_cache=400
  5. 官方解释为:可以存储在定义缓存中的表定义数(来自.frm文件)。如果使用大量表,可以创建大型表定义缓存以加快表的打开速度。与普通的表缓存不同,表定义缓存占用更少的空间,并且不使用文件描述符。最小值和默认值均为400
  6. table_open_cache=256
  7. MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。
  8. 官方解释为:所有线程的打开表数。增加该值会增加mysqld所需的文件描述符的数量。因此,您必须确保在[mysqld safe]部分的变量“open files limit”中将允许打开的文件量设置为至少4096
  9. mysql 性能提高配置#####################################################
  10. skip-name-resolve
  11. #禁止MySQL对外部连接进行DNS解析!!所有远程主机连接授权都要使用IP地址方式
  12. back_log = 384
  13. #back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。
  14. key_buffer_size = 256M
  15. #key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。对于内存在4GB左右的服务器该参数可设置为256M或384M。
  16. max_allowed_packet = 4M
  17. thread_stack = 256K
  18. table_cache = 128K
  19. sort_buffer_size = 6M
  20. #查询排序时所能使用的缓冲区大小。所以,对于内存在4GB左右的服务器推荐设置为6-8M。
  21. read_buffer_size = 4M
  22. #读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。
  23. join_buffer_size = 8M
  24. #联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。
  25. myisam_sort_buffer_size = 64M
  26. table_cache = 512
  27. thread_cache_size = 64
  28. query_cache_size = 64M
  29. #指定MySQL查询缓冲区的大小。。
  30. tmp_table_size = 256M
  31. max_connections = 768
  32. #指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提示,则需要增大该参数值。
  33. max_connect_errors = 10000000
  34. wait_timeout = 10
  35. #指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10
  36. thread_concurrency = 8
  37. #该参数取值为服务器逻辑CPU数量*2,在本例中,服务器有2颗物理CPU,而每颗物理CPU又支持H.T超线程,所以实际取值为4*2=8
  38. table_cache=1024
  39. #物理内存越大,设置就越大.默认为2402,调到512-1024最佳
  40. innodb_additional_mem_pool_size=4M
  41. #默认为2M
  42. innodb_flush_log_at_trx_commit=1
  43. #设置为0就是等到innodb_log_buffer_size列队满后再统一储存,默认为1
  44. innodb_log_buffer_size=2M
  45. #默认为1M
  46. innodb_thread_concurrency=4
  47. #你的服务器CPU有几个就设置为几,建议用默认一般为8
  48. key_buffer_size=256M
  49. #默认为218,调到128最佳
  50. tmp_table_size=128M
  51. #默认为16M,调到64-256最挂
  52. read_buffer_size=4M
  53. #默认为64K
  54. read_rnd_buffer_size=16M
  55. #默认为256K
  56. sort_buffer_size=32M
  57. #默认为256K
  58. thread_cache_size=120
  59. #默认为60
  60. query_cache_size=32M

修改完毕后,重启mysql服务,service mysql restart。通过这种方法确实可以降低mysql的内存占用,但我这只是通过降低性能来换取内存罢了,如果对吞吐量要求比较高的情况,那肯定是不能这样直接修改的,得根据实际请求进行调整才行。

7、How to Fix WordPress 502 Bad Gateway Error

8、

  1. Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /home/wwwroot/www.###.com/wp-content/themes/neve/globals/google-fonts.php on line 8
  2. Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /home/wwwroot/www.###.com/wp-includes/class-wp-fatal-error-handler.php on line 74 

9、百度了下,原因是PHP的内存不够大。网上大部分都是让改php.ini配置文件:但是发现改完了,也没用,报同样的错误,于是就想用PHP自带的unset()函数去处理,在做foreach()的时候,用完就unset变量,然后就不报错了,数据也能正常写入新的表

10、How to fix Error “/wp-json/wp/v2/ Failed to load resource” on Wordpress

https://medium.com/@nguyentamdotme/how-to-fix-error-wp-json-wp-v2-failed-to-load-resource-on-wordpress-e4a204f8f698

11、PHP-FPM进程CPU 100%是怎么回事?

1)进程跟踪

  1. # top //找出CPU使用率高的进程PID
  2. # ll /proc/PID/fd //查看该进程在处理哪些文件
  3. # strace -p PID //跟踪进程
  4. 查看占用内存最高的5个进程
  5. ps aux | sort -k4nr | head -n 5
  6. 查看占用cpu最高的5个进程
  7. ps aux | sort -k3nr | head -n 5

将有可疑的PHP代码修改之,如:file_get_contents没有设置超时时间。

2)内存分配

如果进程跟踪无法找到问题所在,再从系统方面找原因,会不会有可能内存不够用?据说一个较为干净的PHP-CGI打开大概20M-30M左右的内存,决定于PHP模块开启多少。

通过pmap指令查看PHP-CGI进程的内存使用情况

# pmap $(pgrep php-cgi |head -1)

按输出的结果,结合系统的内存大小,配置PHP-CGI的进程数(max_children)。

3)监控

最后,还可以通过监控与自动恢复的脚本保证服务的正常运转。下面是我用到的一些脚本:

只要一个php-cgi进程占用的内存超过 %1 就把它kill掉

  1. #!/bin/sh
  2. PIDS=`ps aux|grep php-cgi|grep -v grep|awk’{if($4>=1)print $2}’`
  3. for PID in $PIDS
  4. do
  5. echo `date +%F….%T`>>/data/logs/phpkill.log
  6. echo $PID >> /data/logs/phpkill.log
  7. kill -9 $PID
  8. done

检测php-fpm进程

  1. #!/bin/bash
  2. netstat -tnlp | grep “php-cgi” >> /dev/null #2&> /data/logs/php_fasle.log
  3. if [ "$?" -eq "1" ];then #&& [ `netstat -tnlp | grep 9000 | awk '{ print $4}' | awk -F ":" '{print $2}'` -eq "1" ];then
  4. /usr/local/webserver/php/sbin/php-fpm start
  5. echo `date +%F….%T` “System memory OOM.Kill php-cgi. php-fpm service start. ” >> /data/logs/php_monitor.log
  6. fi

通过http检测php执行

  1. #!/bin/bash
  2. status=`curl -s –head “http://127.0.0.1:8080/chk.php” | awk ‘/HTTP/ {print $2}’`
  3. if [ $status != "200" -a $status != "304" ]; then
  4. /usr/local/webserver/php/sbin/php-fpm restart
  5. echo `date +%F….%T` “php-fpm service restart” >> /data/logs/php_monitor.log
  6. fi

4)多个php-fmp进程占用cpu过高,都达到100%了,于是打算监听一下进程,看看在执行什么操作,使用 strace 命令:

#监听进程 strace -o /tmp/output.txt -T -tt -F -e trace=all -p 7757
#查看log tail -f /tmp/output.txt

结果还没看出来什么,cpu占用率已经下来了,那几个进程已经结束了。最后通过 php慢日志 发现了端倪。

php慢日志开启条件,需要在 php-fpm.conf 配置如下:

request_slowlog_timeout = 1 #脚本超时秒数,超过1稍都算慢了
slowlog = /var/log/php.log.slow #记录慢日志路径

查看近1000条php慢日志:tail -n 1000 /var/log/php.log.slow
经查找发现了罪魁祸首,是前同事留下的一个大递归操作有问题:

然后优化代码就可以了。

这种单个php-fpm进程cpu占用过高,基本上是由于程序本身存在问题(如程序无限循环逻辑),优化程序后如果还得不到解决,那就如网上所说需要考虑 php-fpm.conf 里面的一些配置参数了,以及升级服务器。

参考网址:

1、https://www.cnblogs.com/xiaobingch/p/16189536.html

2、

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索