SQL2043N 与 linux的randomize_va_space特性

自从数据库服务器从redhat4.6升级到redhat5.5之后,在使用TSM备份的时候偶尔会出现SQL2043N

查看错误:

[[email protected] ~]$ db2 ? SQL2043N

SQL2043N  Unable to start a child process or thread.
Explanation:
Unable to start up the child processes or threads required during the
processing of a database utility. There may not be enough available
memory to create the new process or thread. The utility stops
processing.
User response:
Ensure the system limit for number of processes or threads has not been
reached (either increase the limit or reduce the number of processes or
threads already running). Ensure that there is sufficient memory for the
new process or thread. Resubmit the utility command  

从描述看好像是数据库在申请内存的时候失败,但是内存应该很充裕 ,redhat4.6的时候是16G,升级到redhat5.5

之后已经提高到了64G,应该不会内存不足,但是备份天天做,偶尔失败一次也可以接受,就没在意,之后在值班过程

中发现组内其他系统也会偶尔出现SQL2043N,看来这似乎并不是一个偶尔现象 ,晚上就回家百度一下 SQL2043N,获得

了意外的收获,在官网找到如下解释:

Problem(Abstract)
ASLR or Address Space Layout Randomization is a feature that is activated by default on some of the newer linux distributions. It is designed to load shared memory objects in random addresses.

In DB2, multiple processes map a shared memory object at the same address across the processes. It was found that DB2 cannot guarantee the availability of address for the shared memory object when ASLR is turned on.

Important note: DB2 10.1 has been enhanced so that ASLR can be safely enabled.
Symptom
This conflict in the address space means that a process trying to attach a shared memory object to a specific address may not be able to do so, resulting in a failure in shmat subroutine. However, on subsequent retry (using a new process) the shared memory attachment may work. The result is a random set of failures. Some processes that have been known to see this error are: db2pd, db2egcf, and db2vend.
Some of the behaviors seen include the following:
For the db2pd command, it will report no data found even through the instance / database is active:
Database SAMPLE not activated on database partition 0.

For the db2egcf process, used for HA monitoring, the db2egcf may incorrectly determine the instance is down and initiate a failover.

For the db2vend process, backup and log archive methods might fail with an error indicating a child process could not be started:
SQL2043N  Unable to start a child process or thread.  

Diagnosing the problem
When this problem is suspected, check db2diag.log for the shmat failure like the following. Note that the same error message can also occur for a different cause. Hence, it's important to note the process that reported this error.

FUNCTION: DB2 UDB, SQO Memory Management, sqlocshr, probe:180
MESSAGE : ZRC=0x850F0005=-2062614523=SQLO_NOSEG
          "No Storage Available for allocation"
          DIA8305C Memory allocation failure occurred.
CALLED  : OS, -, shmat                    OSERR: EINVAL (22)
Resolving the problem
1) Disable ASLR temporarily (change is only effective until next boot):
Run "sysctl -w kernel.randomize_va_space=0" as root.

2) Disable ASLR immediately and on all subsequent reboots:

Add the following line to /etc/sysctl.conf:
kernel.randomize_va_space=0
and then run "sysctl -p" as root to make the change take effect immediately.  

大致意思就是LINUX的内存随机化地址特性导致DB2进程不能正确的attach到一个 shared memory object ,那么linux为什么要开启这种特性?

在百度 randomize_va_space 关键字:

Linux Kernel引入了地址空间布局随机化的概念,该概念的提出是出于安全考虑。试想如果堆栈空间的地址都是确定的,那么恶意代码就很容易

通过内存溢出的代码来访问堆栈空间的内容,地址空间布局随机化就是使得进程虚拟空间的布局(主要是各个部分的起始地址)位于随机的位置,

以此来降低被攻击的可能性。

在/proc/sys/kernel/randomize_va_space中的值如果为0则表示关闭所有的随机化,如果为1,表示打开mmap base、栈、VDSO页面随机化,如果

为2则表示在1的基础上进一步打开堆地址随机化。在打开堆地址随机化之前,堆的起始位置是紧接着应用程序bss段之后的。

了解这些之后突然想起在平时使用db2pd时候,也会出现SQL2043N,然后在运行一次就正常了,因为db2pd通过attach db2共享内存来获得数据库

的监控数据,所以db2pd为轻量级工具,对数据库的性能影响比较少

之后在服务器上设置kernel.randomize_va_space=0之后就在无此错误出现

时间: 2024-10-06 08:05:01

SQL2043N 与 linux的randomize_va_space特性的相关文章

linux下bash特性和基础管理类命令(一)

bash 的基础特性 1.glob 通配字符         *多个任意字符         ?一个任意字符        []匹配指定范围内的任意单个字符       [^]匹配范围外的任意单个字符      [:lower:]小写字母   #中括号为字符集的一部分,使用时还要加中括号      [:upper:]大写字母     [:alnum:]所有字母     [:digit:]数字     [:space:]空白字符     [:punct:]标点符号 2.组合键     Ctrl+a

linux的shell特性三兼杂记

shell可以说是一个解释器,同时为代码运行提供了运行环境.并且提供了编程能力 shell没有自己的库,只是写命令调用操作内的小程序命令 bash特性中,bash不支持浮点数,把所有要存储的数据当做字符来进行. linux脚本其实就是一堆命令的堆砌,然后是用程序控制着脚本实施运行. 编程语言的基本结构: 数据,数据存储:变量,数组,等等 表达式:例如赋值语句 语句:顺序语句,选择语句等等 编程风格: 1.过程编程:以指令为中心,数据为指令服务 2.对象编程:以数据为中心,指令服务数据 编译型语言

Linux 最新SO_REUSEPORT特性

1.前言 昨天总结了一下Linux下网络编程“惊群”现象,给出Nginx处理惊群的方法,使用互斥锁.为例发挥多核的优势,目前常见的网络编程模型就是多进程或多线程,根据accpet的位置,分为如下场景: (1)单进程或线程创建socket,并进行listen和accept,接收到连接后创建进程和线程处理连接 (2)单进程或线程创建socket,并进行listen,预先创建好多个工作进程或线程accept()在同一个服务器套接字.                        这两种模型解充分发挥了

Linux的systemd特性及gawk使用

1. 简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理 Systemd的新特性: 系统引导时实现服务并行启动: 按需激活进程: 系统状态快照: 基于依赖关系定义服务控制逻辑: 核心概念:unit unit由其相关配置文件进行标识.识别和配置:文件中主要包含了系统服务.监听的socket.保存的快照以及其它与init相关的信息: 这些配置文件主要保存在: /usr/lib/systemd/system /run/system

Linux系统基础特性

一.Linux操作系统说明 1.主流的Linux发行版 Linux发行版有数百种之多,常见的版本有以下几种: 1)RedHat:中国和美洲流行 Redhat 9.0个人版2003年停止更新àFedora Core:6个月更新一次 RedHat Enterprise Linux: RHEL --->社区版CentOS: Community ENTerprise OS 2)Slackware 版本 SuSE(商业.开源两种)--->欧洲流行 SLES:SuSE的商业版 OpenSuSE :SuSE

Linux的systemd特性及awk使用

1.简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理Systemd的新特性: 系统引导时实现服务并行启动: 按需激活进程: 系统状态快照: 基于依赖关系定义服务控制逻辑: 核心概念:unit unit由其相关的配置文件进行标识.识别和配置:文件中主要包含了系统服务.监听的socket.保存的快照以及其他与init相关的信息: /usr/lib/system /run/systemd/system /etc/systemd/

Linux之bash特性

什么是shell?字面意思:壳,充当人机交互的翻译官,当用户输入一条命令,shell就会解析.shell位于操作系统外层,负责与用户交互.shell类型:可以查看/etc/shells文件,bash shell作为系统的默认shell,比较流行,bash有众多特性.查看系统当前shell:#echo $SHELL 命令历史记录 命令/目录补全功能 命令行展开 命令的执行结果 快捷键 glob通配符 多命令执行 命令历史记录shell进程会将保存此前用户提交执行过的命令,保存在用户家目录:~/.b

linux bash基本特性

一.bash 基础特性 (1)命令历史的功能 history: 环境变量 HISTSIZE:命令历史记录的条数 HISTFILE: ~/.bash_history 每个用户都有自己独立的命令历史文件 HSTFILESIZE:命令历史文件记录历史的条数 history -d OFFSET:删除命令历史第几条 history -c:清空命令历史 history #:显示最近#条命令历史 history -a:手动增加当前会话缓冲区的命令至命令历史文件中 调用历史中的命令: !#:重复执行命令历史中第

linux服务器市场特性高可用高性能 (集群上体现)安全

https://www.linuxprobe.com/chapter-00.html 1 linux安全 更安全 对比windows  代码漏洞 及时修补 全世界看到源代码 2 linux 可以卸载图形界面 linux图形化就是一个软件 可以卸载 卸载图形化 不占用内存 网站内存沾满 内存占满充分压榨系统内存  高性能 3 windows是不能卸载图形化界面 原文地址:https://www.cnblogs.com/xuanbjut/p/11785865.html