51.php-fpm的pool 慢日志 open_basedir 进程管理

12.21 php-fpm的pool

12.22 php-fpm慢执行日志(测试时报错)

12.23 open_basedir

12.24 php-fpm进程管理

 

 

 

12.21 php-fpm的pool:

 

php-fpm里的pool也叫池子,咱们之前加入过www的配置,这个www就叫pool

Nginx可以设置不同的站点,每个站点都可以设置不同的pool。好处是当其中一个站点502了(资源耗尽了),如果所有的网站都使用了同一个池子,那么其中一个网站发生了故障,就会把资源耗尽,就会造成其他的站点502。所以有必要把每一个站点隔离开来,每一个站点使用单独的pool

设置多个pool的目的是,防止发生502(资源耗尽)。一个pool只能接受50个访问请求如果再有一个请求会502。另外的pool不受影响

vim /usr/local/php-fpm/etc/php-fpm.d///在[global]部分增加

include = etc/php-fpm.d/*.conf

mkdir /usr/local/php-fpm/etc/php-fpm.d/

cd /usr/local/php/etc/php-fpm.d/

vim www.conf //内容如下

[www]

listen = /tmp/www.sock //相应的在Nginx的虚拟主机文件里(php相关的),监听也选择为sock

listen.mode=666

user = php-fpm

group = php-fpm

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

继续编辑配置文件

vim axin.conf //内容如下

[axin]

listen = /tmp/axin.sock

listen.mode=666

user = php-fpm

group = php-fpm

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

/usr/local/php/sbin/php-fpm –t

/etc/init.d/php-fpm restart

 

 

实例:

[root@localhost ~]# cd /usr/local/php-fpm/etc/

[root@localhost etc]# ls

pear.conf  php-fpm.conf  php-fpm.conf.default  php.ini

[root@localhost etc]# cat php-fpm.conf 打开php-fpm的配置文件

[global]

pid = /usr/local/php-fpm/var/run/php-fpm.pid

error_log = /usr/local/php-fpm/var/log/php-fpm.log

[www] 之前定义的www,就是一个pool(池子)

#listen = /tmp/php-fcgi.sock 每个pool可以监听不同的sock或者是IP

listen = 127.0.0.1:9000

listen.mode = 666

user = php-fpm

group = php-fpm

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

[root@axinlinux-01 etc]# vim php-fpm.conf

[axin.com] 复制之前的【www】。改名字和listen

listen = /tmp/axin.sock

#listen = 127.0.0.1:9000

[root@localhost etc]# /usr/local/php-fpm/sbin/php-fpm -t

[26-Jul-2019 09:16:38] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

[root@localhost etc]# /etc/init.d/php-fpm reload

[root@localhost etc]# /etc/init.d/php-fpm stop

[root@localhost etc]# /etc/init.d/php-fpm start

Reload service php-fpm done

[root@localhost etc]# ps aux |grep php-fpm 会显示两个pool,最右侧会有我们设置的axin.com

root       2111  0.0  0.5 229612  5052 ?        Ss   13:15   0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm    2112  0.0  0.4 229552  4732 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2113  0.0  0.4 229552  4732 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2114  0.0  0.4 229552  4732 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2115  0.0  0.4 229552  4732 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2116  0.0  0.4 229552  4736 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2117  0.0  0.4 229552  4736 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2118  0.0  0.4 229552  4736 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2119  0.0  0.4 229552  4736 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2120  0.0  0.4 229552  4736 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2121  0.0  0.4 229552  4736 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2122  0.0  0.4 229552  4736 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2123  0.0  0.4 229552  4736 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2124  0.0  0.4 229552  4736 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2125  0.0  0.4 229552  4736 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2126  0.0  0.4 229552  4740 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2127  0.0  0.4 229552  4740 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2128  0.0  0.4 229552  4740 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2129  0.0  0.4 229552  4740 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2130  0.0  0.4 229552  4740 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2131  0.0  0.4 229552  4740 ?        S    13:15   0:00 php-fpm: pool axin.com
php-fpm    2132  0.0  0.4 229552  4736 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2133  0.0  0.4 229552  4736 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2134  0.0  0.4 229552  4736 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2135  0.0  0.4 229552  4736 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2136  0.0  0.4 229552  4740 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2137  0.0  0.4 229552  4740 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2138  0.0  0.4 229552  4740 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2139  0.0  0.4 229552  4740 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2140  0.0  0.4 229552  4740 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2141  0.0  0.4 229552  4740 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2142  0.0  0.4 229552  4744 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2143  0.0  0.4 229552  4744 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2144  0.0  0.4 229552  4744 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2145  0.0  0.4 229552  4744 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2146  0.0  0.4 229552  4744 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2147  0.0  0.4 229552  4744 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2148  0.0  0.4 229552  4744 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2149  0.0  0.4 229552  4744 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2150  0.0  0.4 229552  4744 ?        S    13:15   0:00 php-fpm: pool www
php-fpm    2151  0.0  0.4 229552  4744 ?        S    13:15   0:00 php-fpm: pool www
root       2737  0.0  0.0 112724   992 pts/1    R+   13:41   0:00 grep --color=auto php-fpm

现在是两个不同的池子,那怎么去用呢?(以下)

[root@localhost etc]# vim /usr/local/nginx/conf/vhost/test.com.conf 去nginx的虚拟主机test.com.conf定义fastcgi_pass为sock

location ~ \.php$

{

include fastcgi_params;

fastcgi_pass unix:/tmp/php-fcgi.sock;

#fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;

}

[root@localhost etc]# cd /usr/local/nginx/conf/vhost/

[root@localhost vhost]# vim aaa.com.conf 在去定义aaa.com.conf,加上php的模块

location ~ \.php$

{

include fastcgi_params;

fastcgi_pass unix:/tmp/axin.sock; 在这里改为axin.sock。这样两个站点就隔离开了

#fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;

} 这要改为default

这样两个站点就隔离开了

server

{

   listen 80 default_server;
   server_name aaa.com;
   index index.html index.htm index.php;
   root /data/wwwroot/default;

   location ~ \.php$

   {

   include fastcgi_params;
   fastcgi_pass unix:/tmp/axin.sock;
   #fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
   }
}

那么,比如test.com.conf([www])比较忙,50个服务已经满了,但是还有新的进程进来,就会报502。因为没有多余的php进程给他提供服务了。而我们新建的这个aaa.com.conf([axin.com])不受影响,因为他使用的另外一个pool。这就是为什么要定义多个pool的原因

 

我们在Nginx主配置文件里加入了 include = etc/php-fpm.d/*.conf,那php-fpm也支持

[root@localhost vhost]# cd ..

[root@localhost conf]# tail nginx.conf

gzip on;

gzip_min_length 1k;

gzip_buffers 4 8k;

gzip_comp_level 5;

gzip_http_version 1.1;

gzip_types text/plain application/x-javascript text/css text/htm

application/xml;

include vhost/*.conf; 在nginx里我们加入了include

}

[root@localhost conf]# vim /usr/local/php-fpm/etc/php-fpm.conf

在[global]部分增加include = etc/php-fpm.d/*.conf

[root@localhost conf]# cat /usr/local/php-fpm/etc/php-fpm.conf 先cat出来

[global]

pid = /usr/local/php-fpm/var/run/php-fpm.pid

error_log = /usr/local/php-fpm/var/log/php-fpm.log

include = etc/php-fpm.d/*.conf

[www]

#listen = /tmp/php-fcgi.sock

listen = 127.0.0.1:9000

listen.mode = 666

user = php-fpm

group = php-fpm

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024



[axin.com]

listen = /tmp/axin.sock

#listen = 127.0.0.1:9000

listen.mode = 666

user = php-fpm

group = php-fpm

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

[root@localhost conf]# vim /usr/local/php-fpm/etc/php-fpm.conf 删除[www]和[axin.com]下的文件

[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
include = etc/php-fpm.d/*.conf

[root@axinlinux-01 etc]# cd /usr/local/php-fpm/etc/ 进入到etc下

[root@localhost etc]# mkdir php-fpm.d 因为include路径为php-fpm.d的目录下,多以要创建php-fpm.d的目录

[root@localhost etc]# cd php-fpm.d/ 进入到php-fpm.d目录下

[root@localhost php-fpm.d]# vim www.conf ,把刚才cat的php-fpm的配置文件里的[www]的部分拷贝进来

[root@localhost php-fpm.d]# vim axin.conf ,把刚才cat的php-fpm的配置文件里的[axin.conf]的部分拷贝进来

[root@localhost php-fpm.d]# ls 这样看着就很干净了,类似于nginx的vhosts

axin.conf www.conf

[root@localhost vhost]# /usr/local/php-fpm/sbin/php-fpm -t

[20-Aug-2018 16:02:25] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

报错

1.!!阿鑫做到这有报错,报错是vim两个.conf文件的时候,没有检查是否复制完全.

2.报错有另一个axin 

[26-Jul-2019 10:34:40] ERROR: [pool www] unable to set listen address as it's already used in another pool 'axin.com'
[26-Jul-2019 10:34:40] ERROR: failed to post process the configuration
[26-Jul-2019 10:34:40] ERROR: FPM initialization failed

怀疑是

[root@localhost etc]# /etc/init.d/php-fpm reload 没有重启起来

[root@localhost etc]# /etc/init.d/php-fpm stop

[root@localhost etc]# /etc/init.d/php-fpm start

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

12.22 php-fpm慢执行日志:(非常有用)

 

做php的网站建议使用LNMP,因为我们可以分析php的慢执行日志。因为在运维中,经常会遇到公司的网站访问慢了,能找到到底什么地方慢了,所以慢执行日志非常重要。像系统负载高我们可以用vmstat或top卡那个进程导致的。那php网站

 

~1. vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//比如针对[www]。加入如下内容

request_slowlog_timeout = 1 超过一秒钟记录日志

slowlog = /usr/local/php-fpm/var/log/www-slow.log 记录的日志放在这个路径下

~2.vi /usr/local/nginx/conf/nginx.conf

配置nginx的虚拟主机test.com.conf,把unix:/tmp/php-fcgi.sock改为unix:/tmp/www.sock (这一步阿明并没有做,不做报404)

~3.重新加载nginx服务

/usr/local/nginx/sbin/nginx -t

./etc/init.d/nginx start

netstat -lntp |grep 80

~4.vim /data/wwwroot/test.com/sleep.php//写入如下内容(模拟慢执行的脚本)

<?php echo “test slow log”;sleep(2);echo “done”;?> 为做测试,休眠2秒钟

~5.curl -x127.0.0.1:80 test.com/sleep.php

~6.cat /usr/local/php-fpm/var/log/www-slow.log 这个文件下就是我们设置的慢日志

 

~~所以php一般执行时间介于1秒到两秒之间

 

 

 

实例:

[root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf

改为listen= /tmp/www.sock

[www]
listen = /tmp/www.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/

[root@localhost ~]# /usr/local/php-fpm/sbin/php-fpm -t 测试有无语法错误

[26-Jul-2019 11:45:48] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

[root@localhost ~]# ls /usr/local/php-fpm/var/log/ 检测路径下的慢日志文件是否被创建

php-fpm.log www-slow.log 对应我们加入的路径的慢日志文件

[root@localhost ~]# cat /usr/local/nginx/conf/vhost/test.com.conf [www]被test所使用,所以我们看一下他的路径。好测试他的休眠时间

location ~ \.php$

{

include fastcgi_params;

fastcgi_pass unix:/tmp/php-fcgi.sock;改为www.sock

#fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name; 在这个路径下

}

[root@localhost ~]# vim /data/wwwroot/test.com/sleep.php 在查到的这个路径下创建写试用的休眠php文件

<?php

echo “test slow log”;

sleep(2);

echo “done”;

?>

 

!!此处有个知识点:

有错误的话,有个简单的方式。打开它的配置文件:

[root@localhost php-fpm.d]# vim /usr/local/php-fpm/etc/php.ini

搜索diapaly_errors,将=Off改为=On

display_errors = On

[root@localhost php-fpm.d]# /etc/init.d/php-fpm reload

Reload service php-fpm done

在重新curlhi显示哪里错了

!!!正常生产换件是为Off的,因为不能再浏览器上显示错误日志,要把它放在服务器上的一个文件里!!!

[root@localhost ~]# curl -x127.0.0.1:80 test.com/sleep.php 
 

HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Mon, 29 Jul 2019 05:55:42 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.32

cat /usr/local/php-fpm/var/log/www-slow.log

[29-Jul-2019 13:54:52]  [pool www] pid 1854
script_filename = /data/wwwroot/test.com/sleep.php
[0x00007f6512dc7e00] sleep() /data/wwwroot/test.com/sleep.php:3

[29-Jul-2019 13:55:41]  [pool www] pid 1856
script_filename = /data/wwwroot/test.com/sleep.php
[0x00007f6512dc7e00] sleep() /data/wwwroot/test.com/sleep.php:3

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

12.23 open_basedir:

 

 

 

之前讲过在php.ini里面定义open_basedir。如果服务器上有多个网站,那么在php.ini里面定义就不合适了,因为open_basedir的作用是限定php在指定的目录里活动。所以要么在Apache虚拟主机配置文件里定义,要么在php-fpm的配置文件里定义。那么我们可以针对每个池子定义不同的open_basedir:

 

 

~1. vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入如下内容

php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/

([www]这个池子,是test.com.conf在用着,所以要写test.com)

~2.创建测试php脚本,进行测试

~3.再次更改aming.conf,修改路径,再次测试

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
 

~4.配置错误日志

~5.再次测试

~6.查看错误日志

 

 

 

把open_basedir的错误日志定义上

 

1. vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入如下内容

php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/

([www]这个池子,是test.com.conf在用着,所以要写test.com)

2.vim /usr/local/php-fpm/etc/php.ini

display_errors = Off (改为Off)成产中为Off,不能再浏览器上显示错误日志。要在服务器的一个文件里显示

在搜索error_log

在;error_log = syslog 这一行下面写error_log = /usr/local/php-fpm/var/log/php_errors.log

也就是定义错误日志的路径。完成后要看一下日志是否生成。没有的话就要touch一个并chmod(防止他不能正常的写入)

[root@localhost log]# touch /usr/local/php-fpm/var/log/php_errors.log

[root@localhost log]# chmod 777 /usr/local/php-fpm/var/log/php_errors.log

 

~3.vim /usr/local/php-fpm/etc/php.ini

在搜索error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT在这一行用分号注释掉。在下面加上:

error_reporting =E_ALL (也就是日志级别,为所有)

最后要重启 /etc/init.d/php-fpm restart
 

重启前把地址改错test.com改为wwtest.com

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf

[www]
listen = /tmp/www.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log
php_admin_value[open_basedir]=/data/wwwroot/wwtest.com:/tmp/

[root@localhost log]# cat /usr/local/php-fpm/var/log/php_errors.log
 

in Unknown on line 0
[29-Jul-2019 06:17:08 UTC] PHP Deprecated:  Comments starting with '#' are deprecated in Unknown on line 1 in Unknown on line 0
[29-Jul-2019 06:17:13 UTC] PHP Warning:  Unknown: open_basedir restriction in effect. File(/data/wwwroot/test.com/sleep.php) is not within the allowed path(s): (/data/wwwroot/wwtest.com:/tmp/) in Unknown on line 0
[29-Jul-2019 06:17:13 UTC] PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on line 0
[29-Jul-2019 06:17:26 UTC] PHP Warning:  Unknown: open_basedir restriction in effect. File(/data/wwwroot/test.com/sleep.php) is not within the allowed path(s): (/data/wwwroot/wwtest.com:/tmp/) in Unknown on line 0
[29-Jul-2019 06:17:26 UTC] PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on line 0

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

12.24 php-fpm进程管理:

 

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf:

[www]

listen = /tmp/www.sock

listen.mode=666

user = php-fpm

group = php-fpm

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

request_slowlog_timeout = 1

slowlog = /usr/local/php-fpm/var/log/www-slow.log

php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/

 

 

~1. pm = dynamic //动态进程管理,也可以是static(以什么样的形式启动)(以分号注释)

比如结合下面的,一开始先启动几个,然后根据需求,比如访问量很大的时候自动的生成新的子进程。假如服务器比较闲的话(也就是说没用到他的时候),还可以自动的去销毁,当销毁到一定程度的时候还可以自动的生成一些新的。就是由这些参数来控制什么时候生成与销毁

pm = static //也可以改成静态的,就是一下子生成这么多。但是改为static那么只有pm.max_children = 50这一行生效了,一下的都没有了(ps aux |grep php可以查看)

~2.pm.max_children = 50 //最大子进程数,ps aux可以查看

~3.pm.start_servers = 20 //启动服务时会启动的进程数

~4.pm.min_spare_servers = 5 //定义在空闲时段,子进程数的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程。

~5.pm.max_spare_servers = 35 //定义在空闲时段,子进程数的最大值,如果高于这个数值就开始清理空闲的子进程。(定义的是什么时候去销毁)

~6.pm.max_requests = 500 //定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。

转载于:https://my.oschina.net/u/3866192/blog/3079548

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值