Skip to content

Commit

Permalink
fix pcre_jit config
Browse files Browse the repository at this point in the history
  • Loading branch information
weiliang-ms committed Oct 15, 2021
1 parent 48bba1d commit 910e0cd
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 20 deletions.
13 changes: 8 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@

## 优势

- [ ] 代表需要手动开启
- [x] 代表内置开启

内置如下模块/特性:

- 内嵌模块
Expand All @@ -26,12 +29,12 @@
- [x] [ssl配置](book/02配置样例/01ssl配置样例.md)
- 调优列表
- [x] [worker数量](book/03配置调优/01worker数量调优.md)
- [x] [使用HTTP2](book/03配置调优/02使用HTTP2.md)
- [x] [SSL会话缓存](book/03配置调优/03SSL会话缓存.md)
- [x] [使用server_name代替if指令判断domain](book/03配置调优/04使用server_name代替if指令判断domain.md)
- [x] [使用$request_uri代替正则](book/03配置调优/05使用$request_uri代替正则.md)
- [x] [使用try_files指令来确保文件存在](book/03配置调优/06使用try_files指令来确保文件存在.md)
- [x] [使用return代替rewrite做重定向](book/03配置调优/07使用return代替rewrite做重定向.md)
- [ ] [使用HTTP2](book/03配置调优/02使用HTTP2.md)
- [ ] [SSL会话缓存](book/03配置调优/03SSL会话缓存.md)
- [ ] [使用server_name代替if指令判断domain](book/03配置调优/04使用server_name代替if指令判断domain.md)
- [ ] [使用$request_uri代替正则](book/03配置调优/05使用$request_uri代替正则.md)
- [ ] [使用try_files指令来确保文件存在](book/03配置调优/06使用try_files指令来确保文件存在.md)

### 构建介质

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,30 @@
- [更多nginx文档](https://weiliang-ms.github.io/nginx/)
- [更多linux相关文档](https://weiliang-ms.github.io/wl-awesome/)

> 解释说明
> 使用`pcre_jit`的优势
1. 正则检查规则可能非常耗时,尤其是复杂的正则表达式(regex)条件,允许对正则表达式使用`JIT`可以加快处理速度。
2. 通过使用`PCRE`库编译`NGINX`,可以用`location`块执行复杂的操作,并使用强大的`rewrite`指令
3.
正则检查规则可能非常耗时,尤其是复杂的正则表达式(regex)条件,允许对正则表达式使用`JIT`可以加快处理速度。

> 使用样例
通过使用`PCRE`库编译`NGINX`,可以用`location`块执行复杂的操作,并使用强大的`rewrite`指令

- 不建议实现方式
`PCRE JIT`规则匹配引擎可以显著提高正则表达式的处理速度,带有`pcre_jit``NGINX`比没有它的`NGINX`快很多(处理正则表达式)。
这个选项可以提高性能。

```nginx configuration
```
> 使用`pcre_jit`的劣势
- 建议实现方式
在某些情况下,`pcre_jit`可能有负面影响,具体参考[PCRE性能优化](../优秀文档/PCRE性能优化.md)

```nginx configuration
> 启用方式
- `pcre8.20+`
- `nginx`编译时添加参数: `--with-pcre=path_to_pcre8.20+ --with-pcre-jit`

```
> 使用方式
```nginx configuration
http {
...
pcre_jit on;
...
}
```
40 changes: 40 additions & 0 deletions book/优秀文档/PCRE性能优化.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[原文:PCRE Performance Project](https://zherczeg.github.io/sljit/pcre.html)

## PCRE性能优化

### 简介

`PCRE-sljit`项目的目的是提高[pcre](http://www.pcre.org/) 库的模式匹配速度。

该项目通过使用`sljit`来完成的,`sljit`是一个即时(JIT)编译库,
用于从`pcre_compile()`生成的内部字节码表示转换机器码。

`PCRE-sljit`在通用模式上提供了与基于`DFA`的引擎(如`re2`)相似的匹配速度,但仍然保持`PERL`兼容性。

该功能已经作为`PCRE 8.20`及以上版本的一部分发布,`JIT``8.32`中得到了很大的改进,并且引入了一个原生的接口。

### 关于性能优化

只有在匹配正则表达式占总运行时至少`4-5`%的情况下,`PCRE-JIT`才会对您有所帮助。

否则,由于二进制布局的改变,可能不会有任何性能提高(或者会看到性能下降)

不幸的是,由于`CPU`缓存布局、分支预测机制等原因,插入`nops`可以增加或减少最多可达`3%`的程序运行时间,。

在人为干预下,运行时间的变化幅度可能更大(例如±50%)。当任何函数被修改时,即使改变很小,它也会影响整个二进制布局,
因为其他函数的入口偏移量也会被改变(特别是那些被链接器放在可执行文件中该函数之后的函数)。
因此,当匹配正则表达式的比例非常低时,在使用`PCRE-JIT`时,您可能会遇到性能的轻微下降。

### Usage

TODO

### Motivation

### 工作原理

### Why is it faster?

### 编译时开销


8 changes: 4 additions & 4 deletions rpmbuild/SOURCES/nginx.conf
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ worker_rlimit_nofile 65535;
working_directory /var/dump/nginx;
pid /var/run/nginx.pid;

# pcre JIT
pcre_jit off;

events {
use epoll;
worker_connections 10240;
Expand All @@ -19,7 +22,7 @@ http {
large_client_header_buffers 4 512k;
default_type application/octet-stream;

index index.php index.htm index.html index.$geo.html;
index index.php index.htm index.html;

#web security
#include conf/naxsi/naxsi_core.rules;
Expand Down Expand Up @@ -63,9 +66,6 @@ http {
more_set_headers "Server: Unknown";
absolute_redirect off;

# pcre JIT
pcre_jit on;

# compress
gzip on;
gzip_min_length 1k;
Expand Down

0 comments on commit 910e0cd

Please sign in to comment.