谁动了我的内存:php内存泄露,系统缓存消耗?
?
前言:持续我一贯的标题党作风,说说例子解决方案,没有深入探讨。
?
情景:线上图片服务压缩的图片品质(100),缩略图品质(100)占用了很多空间,导致后来又55个文件了(占用空间160G)才发现这个问题。现在需要解决的是把这部分压缩个低品质的缩略图节省空间(当然在这个硬盘白菜价的时代搞这样的问题没这个必要,我这里讨论的不是节省空间是想找出内存消耗问题)。我用php脚本重新生成缩略图的时候,通过top发现内存消耗一直增加导致后来脚本报错内存不够了,到底谁动了我的内存?
?
处理代码版本一(php):
?
set_time_limit(0);function thumbnailimage($img,$width,$height,$savefile){ $new_img = imagecreatetruecolor ( $width, $height ); imagedestroy($new_img);}//$list:是那个55万的文件名foreache($list as $v) { $img = imagecreatefromjpeg($v); thumbnailimage($img,480,300,$savepath); imagedestroy($img);}?
?
这个脚本处理了5千多个的时候,由于内存不够用挂了,然后我改了php.ini里面的memory_limit改成了5G,但是随着脚本的执行,内存也会被消耗殆尽。
于是我就以为是php的内存泄露了,然后就想用其他方案解决,在老王的技术手册里面看到GraphicsMagick这个工具,然后写了个脚本去处理,结果发现top看到的内存消耗还是一直增加,然后经人提示这个应该是系统操作文件(写文件)文件被缓存了消耗了内存,
调整bash脚本,处理一张图片后手动释放一下内存(sync && echo 3 > /proc/sys/vm/drop_caches),然后top看到的内存消耗就正常了。
由于这个bash脚本处理的速度还不如php的gd库处理,然后就换成php处理。
验证php脚本内存消耗的原因:
处理代码版本二(php):
?
set_time_limit(0);function thumbnailimage($img,$width,$height,$savefile){$new_img = imagecreatetruecolor ( $width, $height );...imagedestroy($new_img);}//$list:是那个55万的文件名foreache($list as $v) { $memory1=memory_get_usage(); file_put_contents('memory','memory1:'.$memory1."\n",FILE_APPEND); $img = imagecreatefromjpeg($v); thumbnailimage($img,480,300,$savepath); imagedestroy($img); $memory1=memory_get_usage(); file_put_contents('memory','memory1:'.$memory1."\n",FILE_APPEND); system('sync && echo 3 > /proc/sys/vm/drop_caches');}?
通这个版本处理内存消耗就正常了,当然php进程也要消耗内存,php.ini的memory_limit稍微改大一下。
从这里看来消耗内存的是系统操作文件消耗的,不是php,由于我的无知一开始错怪了PHP。
?
结尾:这个例子只是简单的描述我找到内存消耗的原因。


APHPDependencyInjectionContainerisatoolthatmanagesclassdependencies,enhancingcodemodularity,testability,andmaintainability.Itactsasacentralhubforcreatingandinjectingdependencies,thusreducingtightcouplingandeasingunittesting.

Select DependencyInjection (DI) for large applications, ServiceLocator is suitable for small projects or prototypes. 1) DI improves the testability and modularity of the code through constructor injection. 2) ServiceLocator obtains services through center registration, which is convenient but may lead to an increase in code coupling.

PHPapplicationscanbeoptimizedforspeedandefficiencyby:1)enablingopcacheinphp.ini,2)usingpreparedstatementswithPDOfordatabasequeries,3)replacingloopswitharray_filterandarray_mapfordataprocessing,4)configuringNginxasareverseproxy,5)implementingcachingwi

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

TomakePHPapplicationsfaster,followthesesteps:1)UseOpcodeCachinglikeOPcachetostoreprecompiledscriptbytecode.2)MinimizeDatabaseQueriesbyusingquerycachingandefficientindexing.3)LeveragePHP7 Featuresforbettercodeefficiency.4)ImplementCachingStrategiessuc

ToimprovePHPapplicationspeed,followthesesteps:1)EnableopcodecachingwithAPCutoreducescriptexecutiontime.2)ImplementdatabasequerycachingusingPDOtominimizedatabasehits.3)UseHTTP/2tomultiplexrequestsandreduceconnectionoverhead.4)Limitsessionusagebyclosin

Dependency injection (DI) significantly improves the testability of PHP code by explicitly transitive dependencies. 1) DI decoupling classes and specific implementations make testing and maintenance more flexible. 2) Among the three types, the constructor injects explicit expression dependencies to keep the state consistent. 3) Use DI containers to manage complex dependencies to improve code quality and development efficiency.

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

SublimeText3 English version
Recommended: Win version, supports code prompts!

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Dreamweaver CS6
Visual web development tools

Atom editor mac version download
The most popular open source editor
