最近有个网站首页打不开,偶尔报504错误,如图所示,这是nginx直接返回的。
今天下午16:00多又出现了,看了下阿里云数据库连接,其实在晚上2:00也出现了一次。这个图是后来问题已经解决了获取的,数据库连接的请求数已经降下来了。
现在似乎是数据库压力很大,由于我们的数据库服务器同时有好几个库在线上,并不确定是其他系统把数据库拖垮还是当前这个系统的原因。
使用语句查询数据库的会话数
SQLSERVER 查看当前连接数
Select * from sys.dm_exec_connections --此命令可以看到有多少人在连
Select * from sys.dm_exec_sessions --此命令可以看到有多少会话,一个连接可以有多个会话
从图中大致定位到还是之前报504的网站对数据库的请求数很多。
定位到具体应用就可以上对应的服务器去进一步去查
先看CPU是比较正常的
再查PHP-FPM的进程数
正常情况下php进程只有10个左右,一下子变成这么多肯定说明是外界有很大的请求数。
但是为了确定是不是php出现什么异常导致进程无法结束,所以结束所有进程,重启php-fpm.。
发现没过多久又出现很多的进程数,所以可以得出结论:这说明nginx报504的原因是外界的请求是持续的,导致数据库压力巨大请求不过来,所以nginx报504。
然后查这个时候的nginx日志最近500条数据
#tail -n 500 /usr/local/nginx/logs/access.log >>500_20160218-1712.txt
从日志里看出主要是百度和搜狗的蜘蛛在爬行,百度是一直在爬行的,应该是比较稳定不会导致网站突然流量剧增,而且据说百度会控制访问的频率,保证不把网站爬挂。
看来后面的日志,发现这个时间段搜狗的蜘蛛爬行数量是非常多的,由于蜘蛛是用集群在爬,所以屏蔽IP是没用的,只能在nginx里屏蔽请求头。
server { listen 80; root /www/; index index.php; #禁止特定爬虫的抓取 if ($http_user_agent ~* "Sogou web spider") { return 403; }
然后重新结束php进程,启动php进程,发现整个进程是非常平稳的维持在10个
说明就是搜狗搞的事情,当务之急只能先这么着了,谁让搜狗没有多少用户群呢,后续的解决方案还是使用缓存,所以从这个事情得出一条非常重要的结论,尽量使用缓存,不要因为网站现在很稳定就不使用缓存,因为网站随时会遇到这种访问量突发的情况。
屏蔽搜狗之前:
屏蔽搜狗之后:
下面是从nginx日志中分析出来的各种蜘蛛对网站的爬行数据排名靠前的几个,其实已经屏蔽了谷歌等很多用处不大的爬虫,但是还是有很多爬虫在爬:
看的出来搜狗一天怕了不少。

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

你應該關心DependencyInjection(DI),因為它能讓你的代碼更清晰、更易維護。 1)DI通過解耦類,使其更模塊化,2)提高了測試的便捷性和代碼的靈活性,3)使用DI容器可以管理複雜的依賴關係,但要注意性能影響和循環依賴問題,4)最佳實踐是依賴於抽象接口,實現鬆散耦合。

是的,優化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)優化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,並避免使用

theKeyStrategiestosigantificallyBoostPhpaPplicationPerformenCeare:1)UseOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)優化AtabaseInteractionswithPreparedStateTementStatementStatementAndProperIndexing,3)配置

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

選擇DependencyInjection(DI)用於大型應用,ServiceLocator適合小型項目或原型。 1)DI通過構造函數注入依賴,提高代碼的測試性和模塊化。 2)ServiceLocator通過中心註冊獲取服務,方便但可能導致代碼耦合度增加。

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)啟用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替換loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

phpemailvalidation invoLvesthreesteps:1)格式化進行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用