%~dp0 获取脚本所在目录
%cd% 获取当前目录
bat命令之@
@的作用是隐藏它后面这一行的命令本身的回显。
明白了基本概念,接下来配置mail使用SMTP对外发送邮件。mail命令的系统级配置文件是/etc/mail.rc,用户级别的默认配置文件是~ /.mailrc,也可以通过MAILRC环境变量设置配置文件路径。作为普通用户,我们在本地的~/.mailrc文件进行配置,SMTP的主要配置如下:
set from=346010975@sohu.com smtp=smtps://smtp.sohu.com:465
set smtp-auth-user="****@****.com" smtp-auth-password="******"
set smtp-auth=login
原文链接: https://blog.csdn.net/raymond_d/article/details/104152933
php-fpm 和 nginx 一样,内建了个状态页,可以通过该状态页了解监控 php-fpm 的状态。
1. 在 php 的安装目录下的 www.conf 中打开 pm.status_path 配置项。如:我的 php 安装目录为 /www/source/php,则 www.conf 文件位于 /www/source/php/etc/php-fpm.d/www.conf;将此文件中的 pm.status_path = /status 前的分号去掉,修改成如下:

默认情况下为 /status,当然你也可以改成 /phpfpm_status 等等。这里我修改成 bcstatus
特别说明:你的服务器配置文件不一定叫 www.conf ,请根据自己的配置设置;也可以直接把 pm.status_path = /bcstatus 添加到 php-fpm.conf 中,但是,一定要添加到 php-fpm.conf 文件中的最后,否则重启php-fpm时会出现以下错误:
[24-Mar-2017 16:18:44] ERROR: [/www/source/php/etc/php-fpm.conf:126] unknown entry 'pm.status_path' [24-Mar-2017 16:18:44] ERROR: failed to load configuration file '/www/source/php/etc/php-fpm.conf' [24-Mar-2017 16:18:44] ERROR: FPM initialization failed
2. nginx 配置
在 nginx 的配置文件中添加以下配置。
server {
......
# 在 server 中添加以下配置
location = /bcstatus {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
.....
}
特别说明:这里的 location 最后用 = 号,如我的配置 location = /bcstatus ,因为 = 的优先级最高,如果匹配成功后,就不会再匹配其它选项了。
3、重启 nginx、php-fpm 使配置生效
# /etc/init.d/nginx restart # /etc/init.d/php-fpm restart
重启后用浏览器访问 http://你的域名/bcstatus 就可以看到效果,如:

pool – fpm池子名称,大多数为www process manager – 进程管理方式,值:static, dynamic or ondemand. dynamic start time – 启动日期,如果reload了php-fpm,时间会更新 start since – 运行时长 accepted conn – 当前池子接受的请求数 listen queue – 请求等待队列,如果这个值不为0,那么要增加FPM的进程数量 max listen queue – 请求等待队列最高的数量 listen queue len – socket等待队列长度 idle processes – 空闲进程数量 active processes – 活跃进程数量 total processes – 总进程数量 max active processes – 最大的活跃进程数量(FPM启动开始算) max children reached - 进程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量太小了,请改大一点。 slow requests – 启用了php-fpm slow-log,缓慢请求的数量
php-fpm 状态页的显示效果,可以有 json、xml、html、full 四种,可以通过 GET 传参显示不同的效果。
1、json 格式
通过访问 http://你的域名/bcstatus?json 来显示 JSON 格式,如:

2、xml 格式
通过访问 http://你的域名/bcstatus?xml 来显示 JSON 格式,如:

3、html 格式
通过访问 http://你的域名/bcstatus?html 来显示 JSON 格式,如:

4、full 格式
通过访问 http://你的域名/bcstatus?full 来显示 JSON 格式,如:

5、full 显示项
pid – 进程PID,可以单独kill这个进程. state – 当前进程的状态 (Idle, Running, …) start time – 进程启动的日期 start since – 当前进程运行时长 requests – 当前进程处理了多少个请求 request duration – 请求时长(微妙) request method – 请求方法 (GET, POST, …) request URI – 请求URI content length – 请求内容长度 (仅用于 POST) user – 用户 (PHP_AUTH_USER) (or ‘-’ 如果没设置) script – PHP脚本 (or ‘-’ if not set) last request cpu – 最后一个请求CPU使用率。 last request memorythe - 上一个请求使用的内存
原文链接:https://blog.csdn.net/ffzhihua/article/details/88844259
🤣
<?php
//apache方法,需要关闭apache缓冲区
for($i=0;$i<1000;$i++){
echo $i;
ob_flush();//刷新PHP自身缓冲区
flush();//刷新(特指apache)web服务器的缓冲区,输出数据
sleep(1);
}
//nginx缓冲区
ob_end_clean(); // 关闭默认的缓冲区 ob_end_flush() 也可以
ob_implicit_flush(); // 打开绝对刷送
header('X-Accel-Buffering: no'); // 告诉nginx直接输出
# 以上3个一起组合即可实现直接输出
for($i=0;$i<1000;$i++){
echo $i;
sleep(1);
}
nginx超时配置参见:
感谢仙士可 http://www.php20.cn/article/159
重新编译php
编译时加上 –with-jpeg 选项
一定要 make clean
mkdir /var/swap # 创建目录
cd /var/swap # 进入目录
# fallocate 分配文件更加高效(推荐)(可能有问题)
fallocate -l 4G /swapfile

# 或者使用 dd(比较慢)
dd if=/dev/zero of=/var/swap/swapfile bs=1M count=1024 # 分配个1024*1M的文件
chmod 600 swapfile # (推荐)修改权限为 0600
mkswap swapfile # 格式化为交换区格式
swapon /var/swap/swapfile # 开启交换区
/etc/fstab 添加下列行 实现开机自动挂载(可选)
/var/swap/swapfile swap swap defaults 0 0
[Unit]
Description=The swoole HTTP server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=simple
ExecStart=/usr/local/bin/xxx 123
[Install]
WantedBy=multi-user.target
1、HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。HTTP 1.1则支持持久连接Persistent Connection, 并且默认使用persistent connection. 在同一个tcp的连接中可以传送多个HTTP请求和响应. 多个请求和响应可以重叠,多个请求和响应可以同时进行. 更加多的请求头和响应头(比如HTTP1.0没有host的字段).在1.0时的会话方式:
1. 建立连接
2. 发出请求信息
3. 回送响应信息
4. 关掉连接HTTP 1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。例如:一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。 HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容。
2.HTTP 1.1增加host字段在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。
3、100(Continue) Status(节约带宽)HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。100 (Continue) 状态代码的使用,允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body。
4、HTTP/1.1中引入了Chunked transfer-coding来解决上面这个问题,发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志。这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载。
5、HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。