当我的所有 php-fpm 都在交换区运行时,如何防止使用交换区

当我的所有 php-fpm 都在交换区运行时,如何防止使用交换区

我在 redhat 上运行着 32gb 的内存。我使用这个服务器专门查询数据库中的列表,并使用 cron 中的 php 来处理它们。

# free -m
              total        used        free      shared  buff/cache   available
Mem:          32261       31401         281         289         579         237
Swap:         10215       10154          61

以下是我的 php 配置

# cat /opt/SP/php7/etc/php.ini
[PHP]
max_input_vars = 5000
session.save_path="/var/SP/prod/shared/lib/session"

[HIDE_PHP_VERSION]
expose_php = Off

[EXTENSIONS]
extension_dir="/opt/SP/php7/lib/php/extensions/no-debug-non-zts-20180731"

[ERROR_HANDLING_AND_LOGGING]
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off

[RESOURCE_LIMITS]
memory_limit = 512M
post_max_size = 32M

[MODULES]
extension=oci8.so

[LANGUAGE_OPTIONS]
ignore_user_abort = On

[FILE_UPLOADS]
max_file_uploads = 1
upload_max_filesize = 24M

[COOKIES]
session.cookie_secure = True
session.gc-probability = 0

[LOGGING]
error_log = syslog

[cURL]
curl.cainfo="/opt/SP/php7/etc/cacert.pem"



# cat /opt/SP/php7/etc/php-fpm.conf
;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ;
;;;;;;;;;;;;;;;;;;;;

error_log = /opt/SP/php7/var/log/php-fpm.log
include = /opt/SP/php7/etc/php-fpm.d/*.conf


# cat /opt/SP/php7/etc/php-fpm.d/php-fpm.conf
[www]

user = wwwrun
group = www

listen = 127.0.0.1:9000

pm = static
pm.max_children = 400
pm.start_servers = 15
pm.min_spare_servers = 10
pm.max_spare_servers = 20

pm.status_path = /status/php-fpm




top - 12:09:12 up 48 days,  1:27,  1 user,  load average: 2.26, 1.41, 1.19
Tasks: 644 total,   2 running, 642 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.7 us,  1.4 sy,  0.0 ni, 96.7 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
KiB Mem : 33036044 total,   237356 free, 32216980 used,   581708 buff/cache
KiB Swap: 10461180 total,    59972 free, 10401208 used.   172100 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
48644 wwwadm    20   0 1007168 433440   1592 S   0.0  1.3   5:20.89 php
48653 wwwadm    20   0  973568 421420   2948 S   0.0  1.3   4:33.10 php
21179 wwwadm    20   0  952396 419352   2960 S   1.0  1.3   2:43.65 php
43888 wwwadm    20   0  959004 417176   1756 S   0.0  1.3   4:09.42 php
43788 wwwadm    20   0 1009516 414936   1820 S   0.0  1.3   6:07.42 php
 8836 wwwadm    20   0  960720 407296   4880 S   0.0  1.2   1:44.64 php
43928 wwwadm    20   0  936784 401724   6960 S   0.0  1.2   3:22.17 php
21160 wwwadm    20   0  930060 393212   2480 S   0.0  1.2   2:39.77 php
44959 wwwadm    20   0  964984 380596   1760 S   0.0  1.2   5:00.72 php
47859 wwwadm    20   0  919456 372392   2360 S   0.0  1.1   5:38.07 php
 8656 wwwadm    20   0  871112 370204   7144 S   0.0  1.1   1:36.08 php
43098 wwwadm    20   0  949720 369700   1788 S   0.0  1.1   6:59.59 php
 8842 wwwadm    20   0  870328 365104   4948 S   0.0  1.1   1:35.45 php
 8814 wwwadm    20   0  871108 364364   5240 S   0.0  1.1   1:40.37 php
47038 wwwadm    20   0  909032 361924   1660 S   0.0  1.1   6:23.22 php
45017 wwwadm    20   0  922280 356532   1816 S   0.0  1.1   3:47.43 php
49368 wwwadm    20   0  985144 351912   1792 S   0.0  1.1   3:41.05 php
45115 wwwadm    20   0  947448 346696   1704 S   0.0  1.0   3:37.00 php
48681 wwwadm    20   0  917968 343176   1752 S   0.0  1.0   4:08.51 php
46955 wwwadm    20   0  891980 341460   1672 S   0.0  1.0   4:47.66 php
46983 wwwadm    20   0  887288 341388   1728 S   0.0  1.0   3:35.27 php
47919 wwwadm    20   0  879076 338164   1660 S   0.0  1.0   4:02.88 php
49387 wwwadm    20   0  877652 336528   1628 S   0.0  1.0   3:37.26 php
43155 wwwadm    20   0  877488 334720   2088 S   0.0  1.0   9:51.60 php
48692 wwwadm    20   0  849656 323388   1588 S   0.0  1.0   3:45.80 php
49397 wwwadm    20   0  968240 318980   1648 S   0.0  1.0   9:13.06 php
44019 wwwadm    20   0  964316 317212   2284 S   0.0  1.0   3:48.66 php
44929 wwwadm    20   0  900132 314892   1656 S   0.0  1.0   3:43.12 php
43925 wwwadm    20   0  844208 307964   4244 S   0.0  0.9   4:16.07 php
47878 wwwadm    20   0  829616 307512   1568 S   0.0  0.9   3:48.02 php
15854 wwwadm    20   0  768504 303412   2316 S   0.0  0.9   0:39.82 php
15899 wwwadm    20   0  769224 303280   2168 S   0.0  0.9   0:41.05 php
42989 wwwadm    20   0  863108 302040   2480 S   0.0  0.9  16:49.68 php
43948 wwwadm    20   0  913744 292900   1924 S   0.0  0.9   3:57.97 php
36520 wwwadm    20   0  809812 291736   4988 S   0.0  0.9   4:08.14 php
36385 wwwadm    20   0  849400 291388   2140 S   0.0  0.9   3:07.14 php
49378 wwwadm    20   0  866720 288552   1720 S   0.0  0.9  11:54.63 php
49426 wwwadm    20   0  915296 284500   1840 S   0.0  0.9   9:12.31 php
46012 wwwadm    20   0  989008 283204   2020 S   0.3  0.9   3:13.75 php
47897 wwwadm    20   0  859716 281960   1600 S   0.0  0.9   3:29.92 php
36529 wwwadm    20   0  911704 281936   4988 S   0.0  0.9   2:59.11 php
48672 wwwadm    20   0  782348 280448   2644 S   1.3  0.8   5:22.95 php
48528 wwwadm    20   0  896124 277804   1780 S   0.0  0.8   3:38.22 php
21141 wwwadm    20   0  777600 277184   1780 S   0.0  0.8   2:19.44 php

答案1

你可以做几件事:

  1. 优化代码,使其不占用太多内存
  2. 并行运行较少的实例
  3. 尝试使用 swappiness=1(有关更多信息,您可以检查这个答案

答案2

我正在使用此服务器专门用于查询数据库中的列表......

你能做些什么来提高它的性能吗?询问加工应用于结果集?

... 使用 php 处理它们来自 cron...

由于你正在使用 cron,我假设你正在调用此过程定期可能是
因为第一个实例运行时间“太长”,而第二个实例正在启动,而第一个实例正在运行仍然跑步,这取决于他们正在做什么,这将使两个都跑得更慢。
然后第三实例启动...等等...

答案3

我会将 pm.max_children 设置在 70-75 之间。您有 32GB RAM。我会为操作系统(例如文件系统缓存)和 Web 服务器(例如 apache、nginx..)保留 2-4GB。其余的我会用于 php。PHP 似乎每个实例使用大约 400MB 的物理内存(其中一些是共享的,因此您应该更多地关注 pss,而不是 rss,但为了简化,我们将使用 rss)。

(32000-2000)/400=75
(32000-4000)/400=70

相关内容