[20191119]探究ipcs命令输出2.txt
[20191119]探究ipcs命令输出2.txt
--//继续上午的测试:http://blog.itpub.net/267265/viewspace-2664758/=>[20191119]探究ipcs命令输出.txt
--//先补充ipcs 剩余2个参数 -l -u
--//-l limits
--//-u summary
$ ipcs -l
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 67108864
max total shared memory (kbytes) = 17179869184
min seg size (bytes) = 1
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 2600
max semaphores system wide = 332800
max ops per semop call = 2600
semaphore max value = 32767
------ Messages: Limits --------
max queues system wide = 32768
max size of message (bytes) = 65536
default max size of queue (bytes) = 65536
$ ipcs -u
------ Shared Memory Status --------
segments allocated 5
pages allocated 158305
pages resident 129633
pages swapped 0
Swap performance: 0 attempts 0 successes
------ Semaphore Status --------
used arrays = 1
allocated semaphores = 204
------ Messages: Status --------
allocated queues = 0
used headers = 0
used space = 0 bytes
--//剩下kernel.sem = SEMMSL SEMMNS SEMOPM SEMMNI
kernel.sem = SEMMSL SEMMNS SEMOPM SEMMNI
where
semmsl: The number of semaphores per set 每组信号量
semmns: The total number of semaphores available 可用信号量的总数
semopm: The number of operations which can be made per semaphore call 每个信号量呼叫可以执行的操作数。
semmni: The maximum number of shared memory segments available in the system 系统中可用的最大共享内存段数
--//(我觉得这里是指信号量)。
1.环境:
# grep "^kernel.s[he]" /etc/sysctl.conf
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.sem = 2600 332800 2600 128
SCOTT@book> show sga
Total System Global Area 643084288 bytes
Fixed Size 2255872 bytes
Variable Size 205521920 bytes
Database Buffers 427819008 bytes
Redo Buffers 7487488 bytes
SCOTT@book> show parameter processes
NAME TYPE VALUE
--------- ------- -----
processes integer 200
--//重新定义环境变量
export ORACLE_SID=book
--//顺便说一下我的定义:kernel.sem = 2600 332800 2600 128
--//实际上我开始学oracle什么都不懂,上新闻组问了这个问题,对方给我的解答.第一个参数与processes有关在此基础上+10就可以.
--//第2个参数使用第1个参数*第4个参数 = 2600*128 = 332800.第3个参数他给我的建议等于第1个参数.
--//我当时什么都不懂,既然对方这么建议,按照对方建议先尝试看看.以后也没有在意这个参数,剩下的步骤copy and paste.
--//如果大家看我在单位安装的服务器,基本上这个参数都是这样设置.经典copy and paste操作.
2.测试1:
$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 407011329 oracle 640 12582912 25
0x00000000 407044098 oracle 640 633339904 25
0xe8a8ec10 407076867 oracle 640 2097152 25
------ Semaphore Arrays --------
key semid owner perms nsems
0x6aa88594 328302592 oracle 640 204
------ Message Queues --------
key msqid owner perms used-bytes messages
$ ps -ef | egrep "[o]raclebook|ora_.*_boo[k]"|wc
25 201 1597
--//注意看Semaphore Arrays的nsems=204,也就是sem的数量.你可以测试如果processes增加,该数值也会增加相同的数量.
--//当然我当前设置kernel.sem的semmsl=2600,远远超出processes的数值,不会建立多个信号组.
$ ipcs -s -i 328302592 | awk '/semnum/,/^203/' | awk '$5>0 {print $5}' | sort | uniq -c
5 56258
1 56261
1 56263
1 56269
1 56273
1 56277
1 56279
1 56281
1 56283
1 56285
1 56287
1 56289
1 56291
1 56293
1 56295
1 56306
1 56307
1 56309
1 56311
1 56313
1 56321
1 56323
1 56325
1 56327
1 56329
1 pid
$ ipcs -s -i 328302592 | awk '/semnum/,/^203/' | awk '$5>0 '
semnum value ncount zcount pid
0 0 0 0 56258
1 2559 0 0 56258
2 19574 0 0 56258
3 1 0 0 56258
6 0 0 0 56261
7 0 1 0 56263
9 0 1 0 56269
11 0 1 0 56273
13 0 1 0 56277
14 0 1 0 56279
15 0 1 0 56281
16 0 1 0 56283
17 0 1 0 56285
18 0 1 0 56287
19 0 1 0 56289
20 0 1 0 56291
21 0 1 0 56293
22 0 1 0 56295
25 0 0 0 56307
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
26 0 1 0 56306
27 0 1 0 56309
28 0 1 0 56311
29 0 1 0 56313
30 0 1 0 56329
31 0 0 0 56327
32 0 0 0 56321
33 0 0 0 56323
34 0 0 0 56325
203 0 0 0 56258
--//semnum应该表示序号.pid对应进程号.其它value,ncount,zcount 表示什么,不懂.
--//https://blog.csdn.net/macky0668/article/details/6839559
--//ncount列出等待信号量增加的进程的个数.
--//zcount列出正在等待信号量变成零的进程的个数
$ ps -fp 56307
UID PID PPID C STIME TTY TIME CMD
oracle 56307 56254 0 15:35 ? 00:00:00 oraclebook (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
--//疑问什么情况下ncount=1,pid=56307.视乎是使用后信号量后才会增加.
$ ps -fp 56258
UID PID PPID C STIME TTY TIME CMD
$ ipcs -m -p
------ Shared Memory Creator/Last-op --------
shmid owner cpid lpid
407011329 oracle 56258 56458
407044098 oracle 56258 56458
407076867 oracle 56258 56458
--//Shared Memory Creator 的pid=56258,已经不存在.但是你可以发现Semaphore Array semid=328302592中占5行.
--//视乎前面的4行永远不会覆盖.也就是kernel.sem的semmsl大于processes+4才会仅仅使用Semaphore Arrays.
# grep "^kernel.s[he]" /etc/sysctl.conf
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.sem = 100 332800 100 128
# sysctl -p
SYS@book> startup
ORACLE instance started.
Total System Global Area 643084288 bytes
Fixed Size 2255872 bytes
Variable Size 205521920 bytes
Database Buffers 427819008 bytes
Redo Buffers 7487488 bytes
Database mounted.
Database opened.
$ ipcs -s
------ Semaphore Arrays --------
key semid owner perms nsems
0x6aa88594 328433664 oracle 640 51
0x6aa88595 328466433 oracle 640 51
0x6aa88596 328499202 oracle 640 51
0x6aa88597 328531971 oracle 640 51
0x6aa88598 328564740 oracle 640 51
$ ipcs -u -m
------ Shared Memory Status --------
segments allocated 5
pages allocated 158305
pages resident 111201
pages swapped 0
Swap performance: 0 attempts 0 successes
--//建立了5个Semaphore Array,每个大小nsems=51.
--//为什么不建立3个Semaphore Array,nsems=100或者70?
$ ipcs -m -p
------ Shared Memory Creator/Last-op --------
shmid owner cpid lpid
407142401 oracle 56667 56733
407175170 oracle 56667 56733
407207939 oracle 56667 56733
$ ipcs -s | awk '/0x/ {print $2}' | xargs -I {} ipcs -s -i {} | grep 56667
0 1 0 0 56667
1 2559 0 0 56667
2 19574 0 0 56667
3 1 0 0 56667
0 1 0 0 56667
1 2559 0 0 56667
2 19574 0 0 56667
3 1 0 0 56667
0 1 0 0 56667
1 2559 0 0 56667
2 19574 0 0 56667
3 1 0 0 56667
0 1 0 0 56667
1 2559 0 0 56667
2 19574 0 0 56667
3 1 0 0 56667
0 0 0 0 56667
1 2559 0 0 56667
2 19574 0 0 56667
3 1 0 0 56667
15 0 0 0 56667
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--//不知道它的具体算法.视乎每个array前面4个都是建立pid.
--//贴一个processes=1000的情况,asm实例的processes=1320的情况
# grep "^kernel.s[eh]" /etc/sysctl.conf
kernel.shmmax = 61847529062
kernel.shmall = 15099494
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
$ ipcs -s
------ Semaphore Arrays --------
key semid owner perms nsems
0x869d3e0c 163842 grid 640 165
0x869d3e0d 196611 grid 640 165
0x869d3e0e 229380 grid 640 165
0x869d3e0f 262149 grid 640 165
0x869d3e10 294918 grid 640 165
0x869d3e11 327687 grid 640 165
0x869d3e12 360456 grid 640 165
0x869d3e13 393225 grid 640 165
0x869d3e14 425994 grid 640 165
0x42dc1a48 2392075 oracle 640 250
0x42dc1a49 2424844 oracle 640 250
0x42dc1a4a 2457613 oracle 640 250
0x42dc1a4b 2490382 oracle 640 250
0x42dc1a4c 2523151 oracle 640 250
0x42dc1a4d 2555920 oracle 640 250
0x42dc1a4e 2588689 oracle 640 250
0x42dc1a4f 2621458 oracle 640 250
0x42dc1a50 2654227 oracle 640 250
$ ipcs -s -u
------ Semaphore Status --------
used arrays = 20
allocated semaphores = 3737
--//也不知道多个Semaphore Array对性能有什么影响,视乎从来没有人提到这样对性能存在问题.我看了exadata的设置:
exadata# grep "^kernel.s[he]" /etc/sysctl.conf
kernel.shmmax = 229982982348
kernel.shmall = 56148189
kernel.shmmni = 4096
kernel.sem = 1024 60000 1024 256
--//我个人感觉也许应该根据processes的数量适当调整,不要建立太多的Semaphore Array.
3.测试2:
--//最后测试kernel.sem的第4个参数SEMMNI.
kernel.sem = SEMMSL SEMMNS SEMOPM SEMMNI
semmni: The maximum number of shared memory segments available in the system 系统中可用的最大共享内存段数
--//(我觉得这里是指信号量)。
# grep "^kernel.s[he]" /etc/sysctl.conf
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.sem = 100 332800 100 4
# sysctl -p
SYS@book> startup
ORA-27154: post/wait create failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpcreates
--//无法启动数据库.
# grep "^kernel.s[he]" /etc/sysctl.conf
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.sem = 100 332800 100 5
SYS@book> startup
ORACLE instance started.
Total System Global Area 643084288 bytes
Fixed Size 2255872 bytes
Variable Size 205521920 bytes
Database Buffers 427819008 bytes
Redo Buffers 7487488 bytes
Database mounted.
Database opened.
$ ipcs -a
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 407404545 oracle 640 12582912 25
0x00000000 407437314 oracle 640 633339904 25
0xe8a8ec10 407470083 oracle 640 2097152 25
------ Semaphore Arrays --------
key semid owner perms nsems
0x6aa88594 328925184 oracle 640 51
0x6aa88595 328957953 oracle 640 51
0x6aa88596 328990722 oracle 640 51
0x6aa88597 329023491 oracle 640 51
0x6aa88598 329056260 oracle 640 51
------ Message Queues --------
key msqid owner perms used-bytes messages
4.还原测试环境略.
# grep "^kernel.s[he]" /etc/sysctl.conf
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.sem = 2600 332800 2600 128
5.总结:
--//操作系统的许多东西自己还是存在许多不理解的情况,许多东西纯粹自己在乱猜.毕竟不是自己的专业,需要慢慢积累学习提高.
[20191119]探究ipcs命令输出2.txt的更多相关文章
- [20191119]探究ipcs命令输出.txt
[20191119]探究ipcs命令输出.txt $ man ipcsIPCS(8) Linux Programmer's Manual ...
- 如何将cmd中命令输出保存为TXT文本文件
在使用Windows 中的cmd.exe工具时,有时候我们想要把我们的输入命令及结果保存起来, 但是用复制的方法过于麻烦:有时输出数据条数过大,会造成内容自动滚出屏幕,无法阅读,我们可将命令运行的结果 ...
- 将 cmd 中命令输出内容保存为 TXT 文本文件
如果执行的命令输出内容较多,那么 cmd 控制台将会自动清除前面的内容,那么如何将屏幕的所有内容导出到文本文件? 下面给出简单的演示例子 ping百度,不会自动结束,按 Ctrl+C 强制结束,pin ...
- 【Linux开发】将cmd中命令输出保存为TXT文本文件
将cmd中命令输出保存为TXT文本文件 在网上看到一篇名为:"[转载]如何将cmd中命令输出保存为TXT文本文件" 例如:将Ping命令的加长包输出到D盘的ping.txt文本文件 ...
- pip freeze > requirements.txt` 命令输出文件中出现文件路径而非版本号
pip freeze > requirements.txt 命令输出文件中出现文件路径而非版本号 解决办法: pip list --format=freeze > requirements ...
- shell 脚本之获取命令输出字符串以及函数参数传递
在ubuntu 14.04之后,所有的U盘挂载也分用户之分,最近很多操作也和U盘有关,所以就研究了一上午shell脚本函数以及字符串操作的方法. 字符串操作: 获取他的命令输出比较简单,打个简单的比方 ...
- 将CMD内的显示内容输出到txt文件
将CMD内的显示内容输出到txt文件 xxxx -t >c:\test.txt //xxxx为命令 如ping www.baidu.com //-t >c:\test.tx ...
- 使用dos的tree命令输出文件夹树
用dos的tree命令就可以实现文件夹树状图的输出,不过目前仅能输出为.txt文件 方法如下: 开始->运行 输入cmd打开命令控制台 切换到你要显示的列表文件夹 比如 输入 d: 切换到d盘 ...
- [20190328]简单探究sql语句相关mutexes.txt
[20190328]简单探究sql语句相关mutexes.txt --//摘要:http://www.askmaclean.com/archives/understanding-oracle-mute ...
随机推荐
- flask项目统一捕获异常并自定义异常信息
背景: 在日常编写了一些flask项目,主要用于测试方面的mock场景,但迭代到后期发现有时候会抛出各种乱七八糟的异常或者直接500且没有任何异常信息,这种情况一般都是某个代码块没有用try ...
- ASP.NET Core on K8S深入学习(11)K8S网络知多少
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.Kubernetes网络模型 我们都知道Kubernetes作为容器编排引 ...
- 如何实现一台服务器同时运行两个php版本
有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群jq.qq.com 假设您已经安装了Apache,为这两个项目创建了虚拟主机,并添加 ...
- ASP.NET MVC5基础-过滤器(Filters)详解
什么是过滤器? 过滤器的类型与作用 定义过滤器 授权过滤器 动作过滤器 结果过滤器 异常处理过滤器 过滤器的使用方法 总结 什么是过滤器? 通过上一篇关于Controller控制器的文章我们知道,MV ...
- python3读取图像并可视化的方法(PIL/Pillow、opencv/cv2)
原图: 使用TensorFlow做图像处理的时候,会对图像进行一些可视化的操作.下面,就来列举一些我知道的图像读取并可视化的方法. 1. Pillow模块 1.1 Pillow模块的前生 Pillow ...
- Python中Pyyaml模块的使用
一.YAML是什么 YAML是专门用来写配置文件的语言,远比JSON格式方便. YAML语言的设计目标,就是方便人类读写. YAML是一种比XML和JSON更轻的文件格式,也更简单更强大,它可以通过缩 ...
- C#本地文件下载以及FTP文件服务下载(以Pdf文件为例)
一.C#实现本地文件下载 1.文件下载的路径 文件名称 以及文件下载之后要放的位置 这三个变量是必须要的 2.定义以下四个对象: FileWebRequest ftpWebRequest = nu ...
- iOS开发WKWebView 返回H5上级页面
#pragma mark ---- 点击事件 -(void)leftTapClick:(UITapGestureRecognizer *)sender{ //判断是否能返回到H5上级页面 if (se ...
- Mac环境下执行npm install报权限错误解决办法
1. 一般情况 sudo npm install 注:这相当于windows系统中的 以管理员身份执行,加上sudo后会要求你输入苹果账号密码,而且在输入的时候是没有字符提示的,密码输入完直接按回车就 ...
- 深入解析ReentrantReadWriteLock
前言: 在Java的锁中很多锁都是同一时刻只允许一个线程访问,今天就来看看一个特殊的锁——读写锁.它的特殊之处就在于同一时刻可以运行多个读线程访问或者有一个写线程在访问.能够大大的提高并发性和吞吐量 ...