这一节
pg
在
postmaster
启动时估算数据库的要打开的文件数,设置VFD数。
Pg
用“虚拟”文件描述符(
VFDs
)缓存来处理打开的文件。因各种原因服务器打开很多文件描述符,包括基表、临时文件(例如排序和
hash spool files
)和像那样随机对
C
例程库的调用;超过系统对单进程能打开的文件数的限制是很容易的。操作系统打开一个文件占用一个文件描述符(
FD
)。(在现代
OS
上这个值大概是
256
,但是在其他
OS
上可能低至
32
,
WinServer2003
里是
512
)
根据实际
OS
文件描述符按需打开或关闭,
“虚拟”文件描述符
由该
LRU
(
Last Recently Used
,最近最少使用)池管理。明显的,
如果一个文件通过这套接口打开,所有后续操作必须也通过这套接口操作(文件类型不是一个真实的文件描述符)。
为了该机制能工作,服务器上的大多数(如果不是所有)文件打开应该使用这些接口来代替
C
函数库(例如
open(2)
和
fopen(3)
)。负责,
pg
可以发现实际文件描述符(
FD
)不够用。
这个事情我赶上过,数据库不是
pg
,在一个用户的生产环境上报数据库的
license
文件已过期,但实际上
license
文件是永不过期。后来定位是因为数据库频繁操作
license
文件时没有使用
VFD
这套接口,
FD
达到了
OS
系统对单进程能打开的文件数的限制引起的,所以有了另一片博文《
Windows
系统进程打开文件句柄数的限制
》,解决办法是使用这套接口操作或者使用
C
函数打开后及时使用
C
函数关闭。
上个图,看一下函数调用过程梗概,中间略过部分细节
设置
VFD
方法调用流程图
2
设置
max_safe_fds
话说
main()->
…
->PostmasterMain()->
…
->
set_max_safe_fds
()
,设置了最大可用的
VFD
,具体只是计算相关数字,没有涉及相关管理的数据结构,所以把代码贴出来
。
/*
* set_max_safe_fds
*
Determine
number of filedescriptors
that fd.c is allowed to use
*/
void
set_max_safe_fds
(
void
)
{
int
usable_fds;
int
already_open;
/*----------
* We want to set
max_safe_fds to
*
MIN(usable_fds, max_files_per_process - already_open)
* less the slop factor for
files that are opened without consulting
* fd.c.
This ensures that we won't exceed either
max_files_per_process
* or the
experimentally-determined EMFILE limit.
*----------
*/
count_usable_fds(max_files_per_process,
&usable_fds, &already_open);
max_safe_fds = Min(usable_fds, max_files_per_process -
already_open);
/*
* Take off the FDs
reserved for system() etc.
*/
max_safe_fds -= NUM_RESERVED_FDS;
/*
* Make sure we still have
enough to get by.
*/
if
(max_safe_fds < FD_MINFREE)
ereport(FATAL,
(errcode(ERRCODE_INSUFFICIENT_RESOURCES),
errmsg(
"insufficient file descriptors available to start
server process"
),
errdetail(
"System allows %d, we need at least %d."
,
max_safe_fds + NUM_RESERVED_FDS,
FD_MINFREE + NUM_RESERVED_FDS)));
elog(DEBUG2,
"max_safe_fds
= %d, usable_fds = %d, already_open = %d"
,
max_safe_fds,
usable_fds, already_open);
}
- 大小: 48.7 KB
分享到:
相关推荐
- **功能**: 列出pg_description中对指定对象的描述,如表、表的列、类型、操作符或聚集。 - **示例**: `\dd table_name` 显示`table_name`的相关描述。 **4. \df** - **功能**: 列出所有函数。 - **示例**: `\...
- 创建新进程时,操作系统会为该进程分配必要的资源,包括但不限于内存空间、文件描述符以及打开的文件等。 - 进程间可以通过共享内存、管道、信号等方式进行通信。 #### 二、进程间的通信方式 **1. 共享内存**: -...
- **服务器设置和操作**:包括启动、停止数据库服务,以及日常运维操作。 - **服务器配置**:详细介绍了配置参数的意义及其对数据库性能的影响。 - **用户认证**:支持多种认证方式,如密码验证、证书验证等。 - **...
3. **配置**:安装完成后,需要配置`postgresql.conf`文件以设置数据库参数,如数据目录、端口、最大连接数等。同时,需要初始化数据库集群,通常使用`initdb`命令。 4. **启动与停止**:使用`pg_ctl`或操作系统...
在本文中,我们将深入探讨如何在CentOS 7操作系统上安装PostgreSQL 9.6,一个强大的开源对象关系型数据库管理系统。PostgreSQL因其高度稳定性和丰富的功能特性而被广泛使用,支持多种操作系统,包括各种Linux发行版...
- `/etc/fdprm` 文件用于配置文件描述符限制。 21. **/etc/filesystems** - 此文件定义了可以在系统上使用的文件系统类型。 22. **/etc/ftpusers & /etc/ftphosts & /etc/ftpaccess & /etc/ftpconversions** ...
"postgres-REL_14_5.tar.gz" 是一个与 PostgreSQL 数据库服务器相关的压缩文件,版本号为 14.5。PostgreSQL 是一个开源的对象关系数据库管理系统 (ORDBMS),以其高度稳定、功能丰富、支持多种编程语言以及遵循 ACID...
标题和描述提及的是将一个基于Java的J2EE项目从Windows环境迁移到Linux环境下的Tomcat服务器上进行部署的过程。这个过程涉及到多个关键步骤和注意事项,以下是详细的解释: 1. **Classpath问题**: 在Windows和...
- **检查最大打开文件描述符**:为了提高系统性能,应确保系统配置文件中设置的最大打开文件描述符数量足够高。 ##### 1.3 收集信息 - 收集所有集群节点的IP地址、主机名等基本信息。 - 准备好SSH密钥,以便在集群...
- **文件描述符和进程限制**:通过修改`/etc/security/limits.conf`文件,增加每个用户可打开文件的最大数量和最大进程数。 - **文件系统优化**:为提高I/O性能,可以对数据分区采用XFS文件系统,并配置特定参数如`...
[command]**: 在 shell 中执行命令或启动一个交互式的 shell。 - 示例:`\! ls -l` 在 shell 中执行 `ls -l` 命令。 - **\?**: 获取关于反斜杠(`\`)命令的帮助。 - 示例:`\?` 显示所有反斜杠命令的帮助信息。 - *...
这通常意味着作者已经处理好了框架之间的版本兼容性问题,以及相关的配置文件,如XML配置文件、pom.xml依赖管理和web.xml部署描述符等。 关于【标签】"webwork hibernate spring": 1. **WebWork**:这是一个早期...
- **实践方法**:学习mtree命令的基本语法及如何创建mtree文件描述符文件。 **Hack23:系统克隆** - **技巧概述**:此技巧提供了一种方法来复制整个系统的配置和数据到另一台机器。 - **实践方法**:使用dd命令来...
3. **关闭标准文件描述符**:关闭标准输入(0)、标准输出(1)和标准错误(2),防止与任何打开的文件描述符关联。可以重定向到/dev/null,这样所有输出都被丢弃。 4. **信号处理**:守护进程需要处理各种信号,如...
"可直接运行"意味着这个压缩包包含了所有必要的文件和配置,下载后无需额外设置,只需导入数据库并启动Tomcat服务器即可使用。"亲测~"暗示这个系统已经过实际测试,证明它是可以正常工作的。 在【压缩包子文件的...
4. **Web应用结构**:如果这是一个Web应用,可能会有`WEB-INF`目录,包含`web.xml`部署描述符和Servlet类。 5. **测试代码**:`test`目录可能包含JUnit或其他测试框架的测试用例,确保代码质量。 6. **文档**:可能...
3. 配置文件:如glassfish服务器的部署描述符,用于配置应用的运行环境。 4. README或指导文档:提供项目搭建和运行的步骤,帮助用户理解案例的实施过程。 通过学习这个小案例,新手开发者能够了解JSP开发的基本...
一个普通的用户进程可以通过特定的函数调用(比如在Unix/Linux中使用`fork()`、`setsid()`、`chdir()`等)来转换为守护进程,这包括脱离控制终端、改变工作目录到根目录(防止占用资源)以及关闭不必要的文件描述符...
在描述中提到的“rails的安装顺序”是一个关键知识点,对于初学者来说,正确安装Rails是开始学习的首要步骤。通常,Rails的安装包括以下几个步骤: 1. **系统要求**:确保计算机上安装了Ruby编程语言的最新稳定版本...