Skip to content

Files

Latest commit

Dec 15, 2023
f400df2 · Dec 15, 2023

History

History
209 lines (95 loc) · 6.95 KB

20160331_02.md

File metadata and controls

209 lines (95 loc) · 6.95 KB

CentOS 6.x online change existing running process's ulimits

作者

digoal

日期

2016-03-31

标签

PostgreSQL , Linux , ulimit , 在线修改


背景

前段时间发了一篇关于CentOS 6.x ulimit配置文件变更为/etc/security/limits.d/90-nproc.conf 的文章.

但是如果你的系统中已经存在的进程的nproc是不会被变更过来的. 例如一个数据库服务器.

PostgreSQL所有的backend process都是从postmaster进程fork出来的, 如果postmaster进程的nproc还是老的配置的话, 资源限制依旧存在, 例如.

> psql  
psql: could not fork new process for connection: Resource temporarily unavailable  
  
could not fork new process for connection: Resource temporarily unavailable  

这种情况通过修改/etc/security/limits.d/90-nproc.conf是无法实现的,

* soft    nproc   131072  
* hard    nproc   131072  

但是又不能重启数据库进程怎么办呢?

只要你的内核够新2.6.32+, 那么就可以通过编辑进程的limits来实现.

例如

> ps -ewf|grep postgres  
postgres  5721  5720  0 Feb26 ?        19:11:05 postgres: logger process     

主进程号是5720

# cd /proc/5720  
# cat limits  
Limit                     Soft Limit           Hard Limit           Units       
Max cpu time              unlimited            unlimited            seconds     
Max file size             unlimited            unlimited            bytes       
Max data size             unlimited            unlimited            bytes       
Max stack size            10485760             unlimited            bytes       
Max core file size        unlimited            unlimited            bytes       
Max resident set          unlimited            unlimited            bytes       
Max processes             1024                 131072               processes   
Max open files            131072               131072               files       
Max locked memory         51200000000          51200000000          bytes       
Max address space         unlimited            unlimited            bytes       
Max file locks            unlimited            unlimited            locks       
Max pending signals       256607               256607               signals     
Max msgqueue size         819200               819200               bytes       
Max nice priority         0                    0                      
Max realtime priority     0                    0                      
Max realtime timeout      unlimited            unlimited            us          

软限制还是1024, 修改方法

# echo -n "Max processes=131072:131072" > limits  
# cat limits   
Limit                     Soft Limit           Hard Limit           Units       
Max cpu time              unlimited            unlimited            seconds     
Max file size             unlimited            unlimited            bytes       
Max data size             unlimited            unlimited            bytes       
Max stack size            10485760             unlimited            bytes       
Max core file size        unlimited            unlimited            bytes       
Max resident set          unlimited            unlimited            bytes       
Max processes             131072               131072               processes   
Max open files            131072               131072               files       
Max locked memory         51200000000          51200000000          bytes       
Max address space         unlimited            unlimited            bytes       
Max file locks            unlimited            unlimited            locks       
Max pending signals       256607               256607               signals     
Max msgqueue size         819200               819200               bytes       
Max nice priority         0                    0                      
Max realtime priority     0                    0                      
Max realtime timeout      unlimited            unlimited            us          

千万不要直接编辑这个文件.

限制问题解决了, 不会再报资源不足的错误.

> psql  
psql (9.3.3)  
Type "help" for help.  
postgres=>  

参考

1. http://serverfault.com/questions/201207/set-max-file-limit-on-a-running-process

2. http://blogs.kent.ac.uk/unseenit/2013/06/06/changing-ulimit-for-running-processes/

3. http://www.nowo.com/run-time-changes-ulimit/

4. 《CentOS 6.x 优先级 limit change to /etc/security/limits.d/xxx》

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

digoal's wechat