资源管理
pg_pcpu_limit 的原理:为进程预设一个 cpu 占用率上限,并实时监控进程是否超出此上限值,若超出则让该进程暂停运行一段时间。pg_pcpu_limit 使用 SIGSTOP 和 SIGCONT 这两个信号来控制进程。它不会修改进程的 nice 值,而是通过监控进程的 CPU 占用率来做出动态调整。
限制程序 CPU 使用率:
-
指定 PID 号
# 限制PID 为21203 的程式其CPU 用量上限为50%pg_pcpu_limit --pid 21203 --limit 50 -
指定程序的名称
pg_pcpu_limit --exe md5sum --limit 50
参数说明:
--pid是进程号--limit是进程使用 CPU 百分比--exe是程序名称
CPU 资源控制步骤:
-
启动一个客户进程,cpu 资源占满进程
打开 hsql 运行一个过程,代码如下:
DECLAREV_A NUMBER;BEGINwhile(true)loopV_A := factorial(20000);end loop;END;/
-
查看 CPU 使用资源情况,使用命令
top
-
使用命令来限制 CPU 资源
pg_pcpu_limit -p 进程PID -l 使用率pg_pcpu_limit -p 1507281 -l 40pg_pcpu_limit 启动后会持续监控目标进程,通过 SIGSTOP/SIGCONT 信号将其 CPU 占用压制在指定上限附近。
-
查看 CPU 使用资源情况,使用命令
top限制前,目标进程的 CPU 占用接近 100%,进程状态为
R(running):PID USER ... S %CPU COMMAND9945 halo ... R 100.0 awk执行 pg_pcpu_limit 限制为 40% 后,CPU 占用明显下降,进程状态变为
T(stopped,被 SIGSTOP 暂停):PID USER ... S %CPU COMMAND9945 halo ... T 26.7 awk说明:限制后的实际 CPU 占用会在设定值(40%)附近波动(受采样周期与进程负载影响),进程状态在
R与T之间快速切换,这正是 SIGSTOP/SIGCONT 控制机制的表现。
限制用户的连接数
创建用户,并限制:
create user test with password 'halo';
限制用户连接数:
alter user test connection limit 2;
当 test 用户已占用 2 个连接时,连接到第 3 个会话将被拒绝,报错如下:
FATAL: too many connections for role "test"
说明:中文语言环境下该错误信息显示为"致命错误: 由角色"test"发起的连接太多了"。
空闲时会话退出时长
idle_session_timeout
当一个会话连接长时间没有执行或者活动时,会将会话释放,可以释放缓存。
idle_session_timeout:默认值为 0,表示禁用,其单位是毫秒。
alter system set idle_session_timeout=5000;
select pg_reload_conf();
show idle_session_timeout;
idle_session_timeout
----------------------
5s
(1 row)
会话空闲超过 5 秒后,再输入命令将被服务器主动断开,报错如下:
FATAL: terminating connection due to idle-session timeout
说明:该会话需重新连接后方可继续使用。