Oracle APEX 服务器扩容与调优指南
在云端部署 Oracle APEX?内存不够、CPU 吃紧、响应慢如蜗牛?本篇博文手把手带你全面优化,从操作系统到数据库、从 Tomcat 到 Nginx,通通安排上!
🧭 背景介绍
让我们从一个真实的案例说起。你有一台部署了 APEX 应用的云服务器,配置如下:
- 云主机:Oracle Cloud Compute VM.Standard.E4.Flex
- 操作系统:Oracle Linux 8
- OCPU:1颗
- 内存:16GB
- 数据库版本:Oracle 21c
- APEX 版本:24.2
随着业务量增长,你的应用开始吃紧,该怎么办?——扩容 + 调优!
🖥️ 操作系统扩容
云环境的好处就是伸缩自如。登录控制台,把配置从「1颗16G」一键升到「2颗32G」:
扩容完成后重启服务器,登录进去验证配置是否生效:1
cat /proc/cpuinfo | grep "processor"
1
free -h
🧠 内存规划策略
服务器内存是 32GB,那怎么分配才合理?参考下表:
服务模块 | 内存分配 |
---|---|
Oracle 数据库 | 16GB |
Tomcat + ORDS | 8GB |
Nginx | 2GB |
系统预留 | 6GB |
🗄️ 数据库参数调优
调整 Oracle 参数让数据库吃得饱又跑得快:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23-- 内存分配
ALTER SYSTEM SET MEMORY_TARGET=0 SCOPE=SPFILE;
ALTER SYSTEM SET SGA_TARGET=12G SCOPE=SPFILE;
ALTER SYSTEM SET DB_CACHE_SIZE=8G SCOPE=SPFILE;
ALTER SYSTEM SET SHARED_POOL_SIZE=3G SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=3G SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=6G SCOPE=SPFILE;
-- CPU 并行优化
ALTER SYSTEM SET CPU_COUNT=4 SCOPE=SPFILE;
ALTER SYSTEM SET PARALLEL_THREADS_PER_CPU=1 SCOPE=SPFILE;
ALTER SYSTEM SET PARALLEL_MAX_SERVERS=8 SCOPE=SPFILE;
ALTER SYSTEM SET PARALLEL_MIN_SERVERS=2 SCOPE=SPFILE;
-- 会话连接参数
ALTER SYSTEM SET PROCESSES=300 SCOPE=SPFILE;
ALTER SYSTEM SET SESSIONS=335 SCOPE=SPFILE;
ALTER SYSTEM SET OPEN_CURSORS=500 SCOPE=SPFILE;
-- I/O 优化
ALTER SYSTEM SET DB_WRITER_PROCESSES=2 SCOPE=SPFILE;
ALTER SYSTEM SET DB_FILE_MULTIBLOCK_READ_COUNT=128 SCOPE=SPFILE;
ALTER SYSTEM SET DISK_ASYNCH_IO=TRUE SCOPE=SPFILE;
配置完别忘了重启数据库实例。
☕ 优化 Tomcat + ORDS
JVM 设置(别让 Java 成为瓶颈)
1 | export CATALINA_OPTS="-Xms6g -Xmx6g -server -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2" |
ORDS 数据库连接池设置
编辑 /u01/ords/config/databases/default/pool.xml
:1
2
3
4
5
6
7<entry key="jdbc.InitialLimit">30</entry>
<entry key="jdbc.MinLimit">50</entry>
<entry key="jdbc.MaxLimit">500</entry>
<entry key="jdbc.statementCacheSize">100</entry>
<entry key="jdbc.InactivityTimeout">300</entry>
<entry key="jdbc.MaxStatementsLimit">500</entry>
<entry key="server.worker-threads">200</entry>
🌐 Nginx 配置调优
确保你用的是高并发、支持 GZIP、连接数足够的 Nginx:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;
events {
worker_connections 4000;
use epoll;
multi_accept on;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include /etc/nginx/mime.types;
default_type application/octet-stream;
charset UTF-8;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 1000;
types_hash_max_size 2048;
proxy_buffering on;
proxy_buffer_size 16k;
proxy_buffers 8 256k;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
gzip on;
gzip_vary on;
gzip_http_version 1.0;
gzip_types text/plain application/javascript application/x-javascript text/css;
gzip_min_length 1024;
gzip_comp_level 3;
client_body_buffer_size 128k;
client_max_body_size 10M;
server {
listen 80;
server_name oracleapex.cn www.oracleapex.cn;
access_log /var/log/nginx/apex_access_$time_iso8601.log main;
error_log /var/log/nginx/apex_error_$time_iso8601.log warn;
return 301 https://$host$request_uri;
location /i/ {
alias /u01/apex/images/;
access_log off;
expires 30d;
}
location ^~ /.well-known/acme-challenge/ {
root /var/www/html;
allow all;
}
}
server {
listen 443 ssl;
server_name oracleapex.cn www.oracleapex.cn;
ssl_certificate /etc/letsencrypt/live/oracleapex.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/oracleapex.cn/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
access_log /var/log/nginx/apex_ssl_access.log main;
error_log /var/log/nginx/apex_ssl_error.log warn;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
return 301 $scheme://$host/ords/f?p=100;
}
location /i/ {
alias /u01/apex/images/;
access_log off;
expires 30d;
}
location /ords/ {
proxy_pass http://127.0.0.1:8080/ords/;
proxy_http_version 1.1;
proxy_request_buffering off;
proxy_set_header Host $host;
proxy_set_header Origin "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header X-Forwarded-Host $host;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}
}
重载配置:1
2nginx -t
nginx -s reload
✅ 最终效果
优化后你的 APEX 应用能更稳、更快、更抗压:
- 支撑上千并发用户访问
- 响应速度提升 30%+
- 资源分配更科学,避免抢占或浪费
📌 总结
Oracle APEX 是低代码开发利器,而服务器性能是其基础保障。本文以实战角度出发,覆盖扩容 + 参数调优 + 服务优化,让你在 Oracle APEX 的世界中如虎添翼!