요약: PHP-FPM은 PHP용 FastCGI 프로세스 관리자입니다. Unix 계열 운영 체제(Linux 및 BSD 시스템 포함)에서는 php5-fpm(Linux) 또는 php56-fpm(FreeBSD 10.1)을 설치하여 PHP-FPM을 사용합니다. 하지만 많은 블로그에서 권장하는 기본 설치와 PHP-FPM 설치의 가장 큰 문제점은...
PHP-FPM
是PHP
的FastCGI
过程管理器。在类Unix
操作系统(包括Linux
以及BSD
系统)中,PHP-FPM
通过安装php5-fpm
(Linux
)或者php56-fpm
(FreeBSD 10.1
)을 사용하는 것입니다.
그러나 기본적으로 설치되어 있으며 많은 블로그에서 권장하는 대로 설치됩니다PHP-FPM
가장 큰 문제는 메모리 및 글꼴 계열을 포함하여 많은 리소스를 소비한다는 것입니다. "Source Code Pro", Consolas , Menlo, Monaco, "Courier New", monospace: 0.93em; -크기: 테두리 상자; 배경색: rgb(249, 242, 244);">CPU. 이 블로그에서 사용하는 서버도 비슷한 운명을 겪었습니다. 나는 또한 해당 튜토리얼과 튜토리얼에 따라 설치했기 때문에 PHP-FPM
구성 옵션이 효과적으로 설명되지 않았습니다. PHP-FPM
的最大问题是它会消耗大量资源,包括内存和CPU
。本博客使用的服务器也遭遇了类似的命运。因为我也是按照那些教程安装的,而教程里对于PHP-FPM
的配置选项描述的不够有效。
你可以在/etc/php5/fpm/pool.d
目录下发现这些低效的配置选项。举例来说,以下是我的服务器(当然不是目前这个站点)上的那些低效选项:
; Choose how the process manager will control the number of child processes. pm = dynamic pm.max_children = 75pm.start_servers = 10pm.min_spare_servers = 5pm.max_spare_servers = 20pm.max_requests = 500
那台服务器是一台DigitalOcean Droplet
,配置512M
内存。它上面运行了一个新网站,即使完全空闲时,也必须要靠交换内存才能避免僵死。执行top
/etc/php5/fpm/pool.d
디렉토리 이러한 비효율적인 구성 옵션은 아래에서 확인할 수 있습니다. 예를 들어, 내 서버의 비효율적인 옵션은 다음과 같습니다(물론 현재 사이트는 아님). 🎜PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 13891 cont 20 396944 56596 33416 S 0.0 11.3 :14.05 php5-fpm 13889 cont 20 396480 56316 32916 S 0.0 11.2 :17.67 php5-fpm 13887 cont 20 624212 55088 32008 S 0.0 11.0 :14.02 php5-fpm 13890 cont 20 396384 55032 32312 S 0.0 11.0 :13.39 php5-fpm 13888 cont 20 397056 54972 31988 S 0.0 11.0 :14.16 php5-fpm 14464 cont 20 397020 54696 31832 S 0.0 10.9 :09.44 php5-fpm 13892 cont 20 396640 54704 31936 S 0.0 10.9 :12.84 php5-fpm 13883 cont 20 396864 54692 31940 S 0.0 10.9 :15.64 php5-fpm 13893 cont 20 396860 54628 32004 S 0.0 10.9 :15.13 php5-fpm 13885 cont 20 396852 54412 32116 S 0.0 10.8 :13.94 php5-fpm 13884 cont 20 395164 53916 32364 S 0.0 10.7 :13.51 php5-fpm 13989 cont 20 394960 53548 32108 S 3.7 10.7 :14.37 php5-fpm 2778 mysql 20 1359152 31704 1728 S 0.7 6.3 1:38.80 mysqld 13849 root 20 373832 1180 188 S 0.0 0.2 :03.27 php5-fpm🎜해당 서버는
DigitalOcean Droplet
, 구성 512M
메모리. 그 위에서 새로운 웹사이트가 실행 중이었고 완전히 유휴 상태일 때에도 정지를 방지하기 위해 메모리를 교체해야 했습니다. 실행top
명령은 서버에서 가장 많은 메모리를 차지하는 프로세스를 표시합니다. 🎜PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 13891 cont 20 396944 56596 33416 S 0.0 11.3 :14.05 php5-fpm 13889 cont 20 396480 56316 32916 S 0.0 11.2 :17.67 php5-fpm 13887 cont 20 624212 55088 32008 S 0.0 11.0 :14.02 php5-fpm 13890 cont 20 396384 55032 32312 S 0.0 11.0 :13.39 php5-fpm 13888 cont 20 397056 54972 31988 S 0.0 11.0 :14.16 php5-fpm 14464 cont 20 397020 54696 31832 S 0.0 10.9 :09.44 php5-fpm 13892 cont 20 396640 54704 31936 S 0.0 10.9 :12.84 php5-fpm 13883 cont 20 396864 54692 31940 S 0.0 10.9 :15.64 php5-fpm 13893 cont 20 396860 54628 32004 S 0.0 10.9 :15.13 php5-fpm 13885 cont 20 396852 54412 32116 S 0.0 10.8 :13.94 php5-fpm 13884 cont 20 395164 53916 32364 S 0.0 10.7 :13.51 php5-fpm 13989 cont 20 394960 53548 32108 S 3.7 10.7 :14.37 php5-fpm 2778 mysql 20 1359152 31704 1728 S 0.7 6.3 1:38.80 mysqld 13849 root 20 373832 1180 188 S 0.0 0.2 :03.27 php5-fpm
输出结果显示有12
个php5-fpm
子进程(用户名是cont
)和一个主进程(用户名是root
)。而这12
个子进程只是呆坐在那里,什么事也不做,每个子进程白白消耗超过10%
的内存。这些子进程主要是由pm=dynamic
这个配置选项产生的。
老实说,绝大部分的云主机拥有者也不知道所有这些配置选项是干什么用的,只是简单地复制粘贴而已。我也不准备假装我了解每个PHP
配置文件里的每一个选项的目的和意义。我在很大程度上也是复制粘贴的受害者。
但是我经常检查服务器的资源占用情况,困惑于为什么我的服务器占用这么多的内存和CPU
。举另外一个例子,是这台服务器上的free -mt
命令的结果:
total used free shared buffers cached Mem: 490 480 9 31 6 79 -/+ buffers/cache: 393 96 Swap: 2047 491 1556 Total: 2538 971 1566
在没有任何访问量的情况下,也几乎有整整1G
的内存(实际内存加上交换内存)被占用。当然,通过调整配置pm
的数量可以有所改变,但只是轻微的。只要设置pm=dynamic
,就会有空闲的子进程等在那里等待被使用。
直到读了一篇文章《A better way to run PHP-FPM
》(更好地运行PHP-FPM
)之后,我开始意识到应该如何修改我的配置文件。那篇文章是大约一年前写的,令人失望的是我从昨天晚上搜索相关主题时才看到它。如果你也有服务器并且使用PHP-FPM
的话,我建议你好好读一下那篇文章。
读完文章之后,我修改了我的pm
选项,如下:
; Choose how the process manager will control the number of child processes.pm = ondemand pm.max_children = 75pm.process_idle_timeout = 10s pm.max_requests = 500
最主要的改动就是用pm=ondemand
替换了pm=dynamic
。这一改动对资源占用的影响是巨大的。下面是改动并重新加载php5-fpm
之后运行free -mt
的结果:
total used free shared buffers cached Mem: 490 196 293 28 9 70 -/+ buffers/cache: 116 373 Swap: 2047 452 1595 Total: 2538 649 1888
和之前的结果对比,内存使用量下降了50%
。产生这一下降的原因通过执行top
命令一目了然:
2778 mysql 20 1359152 56708 3384 S 0.0 11.3 2:11.06 mysqld 26896 root 20 373828 19000 13532 S 0.0 3.8 :02.42 php5-fpm 25818 root 20 64208 4148 1492 S 0.0 0.8 :01.88 php5-fpm 25818 root 20 64208 4148 1492 S 0.0 0.8 :01.88 php5-fpm 17385 root 20 64208 4068 1416 S 0.0 0.8 :02.23 php5-fpm 1465 ossec 20 15592 2960 480 S 0.0 0.6 :08.60 ossec-analysisd 1500 root 20 6312 2072 328 S 0.0 0.4 :45.55 ossec-syscheckd 1 root 20 33444 1940 812 S 0.0 0.4 :03.29 init
你注意到这里已经没有子进程了吗?它们去哪里了?这就是设置pm=ondemand
的作用。这样设置之后,只有当有需要的时候,子进程才会被产生。事情做完之后,子进程会留在内存中10
秒钟时间(pm.process_idle_timeout = 10s
),然后自己退出。
我只是对PHP-FPM
的配置做了一点小小的修改,就节省了50%
的内存。当然,这台服务器没有承受大并发的压力,但我相信它能顶得住合理的高负载,考虑到它只有512M
内存。再加上Nginx
微缓存的配置,我想它会做的更好。当然还有另外一些PHP-FPM
和Percona MySQL
的配置优化我还没有做。这里只是给大家分享一个我觉得非常有用的小窍门。
위 내용은 PHP-FPM 메모리 사용량을 줄이는 솔루션 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

데이터베이스 스토리지 세션 사용의 주요 장점에는 지속성, 확장 성 및 보안이 포함됩니다. 1. 지속성 : 서버가 다시 시작 되더라도 세션 데이터는 변경되지 않아도됩니다. 2. 확장 성 : 분산 시스템에 적용하여 세션 데이터가 여러 서버간에 동기화되도록합니다. 3. 보안 : 데이터베이스는 민감한 정보를 보호하기 위해 암호화 된 스토리지를 제공합니다.

SessionHandlerInterface 인터페이스를 구현하여 PHP에서 사용자 정의 세션 처리 구현을 수행 할 수 있습니다. 특정 단계에는 다음이 포함됩니다. 1) CustomsessionHandler와 같은 SessionHandlerInterface를 구현하는 클래스 만들기; 2) 인터페이스의 방법 (예 : Open, Close, Read, Write, Despare, GC)의 수명주기 및 세션 데이터의 저장 방법을 정의하기 위해 방법을 다시 작성합니다. 3) PHP 스크립트에 사용자 정의 세션 프로세서를 등록하고 세션을 시작하십시오. 이를 통해 MySQL 및 Redis와 같은 미디어에 데이터를 저장하여 성능, 보안 및 확장 성을 향상시킬 수 있습니다.

SessionId는 웹 애플리케이션에 사용되는 메커니즘으로 사용자 세션 상태를 추적합니다. 1. 사용자와 서버 간의 여러 상호 작용 중에 사용자의 신원 정보를 유지하는 데 사용되는 무작위로 생성 된 문자열입니다. 2. 서버는 쿠키 또는 URL 매개 변수를 통해 클라이언트로 생성하여 보낸다. 3. 생성은 일반적으로 임의의 알고리즘을 사용하여 독창성과 예측 불가능 성을 보장합니다. 4. 실제 개발에서 Redis와 같은 메모리 내 데이터베이스를 사용하여 세션 데이터를 저장하여 성능 및 보안을 향상시킬 수 있습니다.

JWT 또는 쿠키를 사용하여 API와 같은 무국적 환경에서 세션을 관리 할 수 있습니다. 1. JWT는 무국적자 및 확장 성에 적합하지만 빅 데이터와 관련하여 크기가 크다. 2. 쿠키는보다 전통적이고 구현하기 쉽지만 보안을 보장하기 위해주의해서 구성해야합니다.

세션 관련 XSS 공격으로부터 응용 프로그램을 보호하려면 다음 조치가 필요합니다. 1. 세션 쿠키를 보호하기 위해 Httponly 및 Secure 플래그를 설정하십시오. 2. 모든 사용자 입력에 대한 내보내기 코드. 3. 스크립트 소스를 제한하기 위해 컨텐츠 보안 정책 (CSP)을 구현하십시오. 이러한 정책을 통해 세션 관련 XSS 공격을 효과적으로 보호 할 수 있으며 사용자 데이터가 보장 될 수 있습니다.

PHP 세션 성능을 최적화하는 방법 : 1. 지연 세션 시작, 2. 데이터베이스를 사용하여 세션을 저장, 3. 세션 데이터 압축, 4. 세션 수명주기 관리 및 5. 세션 공유 구현. 이러한 전략은 높은 동시성 환경에서 응용의 효율성을 크게 향상시킬 수 있습니다.

THESESSION.GC_MAXLIFETIMESETTINGINSTTINGTINGSTINGTERMINESTERMINESTERSTINGSESSIONDATA, SETINSECONDS.1) IT'SCONFIGUDEDINPHP.INIORVIAINI_SET ()

PHP에서는 Session_Name () 함수를 사용하여 세션 이름을 구성 할 수 있습니다. 특정 단계는 다음과 같습니다. 1. Session_Name () 함수를 사용하여 Session_Name ( "my_session")과 같은 세션 이름을 설정하십시오. 2. 세션 이름을 설정 한 후 세션을 시작하여 세션을 시작하십시오. 세션 이름을 구성하면 여러 응용 프로그램 간의 세션 데이터 충돌을 피하고 보안을 향상시킬 수 있지만 세션 이름의 독창성, 보안, 길이 및 설정 타이밍에주의를 기울일 수 있습니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
