前提:真机一个,里面虚拟机,都是6.2,虚机有root账户,真机没有。
B 是byte 字节;b 是bit 比特;1B = 8b
1.给一个数据文件,查看L1 L2缓存
[root@serverx 442]# dmidecode --from-dump DMIFILE -t cache
# dmidecode 2.11
Reading SMBIOS/DMI data from file DMIFILE. SMBIOS 2.4 present.
Handle 0x001C, DMI type 7, 19 bytes Cache Information
Socket Designation: L1 Cache
Configuration: Enabled, Socketed, Level 1
Operational Mode: Write Back
Location: Internal
Supported SRAM Types:
Burst
Pipeline Burst
Asynchronous
Installed SRAM Type: Asynchronous
Speed: Unknown
Error Correction Type: Unknown
System Type: Unknown
Associativity: Unknown
Handle 0x001D, DMI type 7, 19 bytes
Cache Information
Socket Designation: L2 Cache
Configuration: Enabled, Socketed, Level 2
Operational Mode: Write Back
Location: External
Installed Size: 0 kB
Supported SRAM Types:
Burst
Pipeline Burst
Asynchronous
Installed SRAM Type: None
Speed: Unknown
Error Correction Type: Unknown
System Type: Unknown
Associativity: Unknown
或者,用参数-t –h可以查看到可以查看的信息种类,L2肯定比L1大
2.给定一个sar.data文件:
a)系统当中最大的进程数是多少?
b)系统中哪个设备的IO速率最高?
c)最高的IO读取速率是多少?
解答:
(a)[root@serverx 442]# LANG=C sar -f sar.data -q | awk '{print $4}' | sort
266
266
267
plist-sz
(b)下面命令执行出来以后,可以看最后的averag得出速率最大的设备和速率。
可以在man sar里面看到rd_sec/s的单位是512 bytes
[root@serverx 442]# LANG=C sar -f sar.data -d -q
Linux 2.6.32-220.el6.x86_64 (ample) 03/02/13 _x86_64_ (1 CPU)
19:30:01 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 20:00:01 dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average:
0.02
0.00 9.25 0.00 18.21 18.12 0.03
Average:    1.84 13.74 13.43 0.14 76.62    3.73 0.68 Average: dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
(补充)某个时间内的平均数据: LANG=C sar –f sar.data –b –s 17:00:00 –e 18:00:00
[root@serverx 442]# LANG=C sar -f sar.data -b -s 17:00:00 -e 18:00:00
Linux 2.6.32-220.el6.x86_64 (ample) 03/02/13 _x86_64_ (1 CPU)
17:00:01 tps rtps wtps bread/s bwrtn/s
17:10:01    2.13 0.00    2.13 0.00 23.93
17:20:02    2.10 0.00    2.10 0.00 23.62
17:30:01    1.97 0.00    1.97 0.00 22.07
17:40:01    2.45 0.00    2.45 0.00 27.83
17:50:01    2.53 0.01    2.53 0.30 28.68
Average:    2.24 0.00    2.24 0.06 25.22
3.给出一个执行文件/etc/cron.daily/rpm,出这个文件里记录的的系统调用最高的
解:strace –c –S calls /etc/cron.daily/rpm
如果是包含follow forks,加-f参数
[root@serverx 442]# strace -c -S calls /bin/ls
DMIFILE sar.data
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.000369 14 27 mmap
0.00 0.000000 0 16 mprotect
0.00 0.000000 0 13 close
...
4.配置系统,使得当/usr/local/bin/greedy运行的时候,提示失败信息为unable to allocate memory但同时
/usr/local/bin/checklimit显示信息为Success: Address space limit is okay.
解:
[root@serverx 442]# sysctl -a | grep overcommit
vm.overcommit_memory = 0
vm.overcommit_ratio = 50
可以看到,vm.overcommit_memory这个变量
vm.overcommit_memory= 0 默认配置,会过量给,太多了不给
1 随便给,要多少都给
2 只最多给swap + vm.overcommit_ratio * 实际物理内存
查看系统已经承诺了多少:grep Comm /proc/meminfo
考试中,在f中令其为2即可
[root@serverx 442]# vim /f
vm.overcommit_memory = 2
[root@serverx 442]# sysctl -p
5.系统需要运行一个应用程序,它要求最少能够映射1GiB共享内存,但是最多不应该多于1.5 GiB。假设这个应用程
序是唯一使用共享内存资源的程序。配置系统:使得能够满足最小共享内存需求,但是该应用程序也不会使用多于给定最大值的共享内存。
分析:
看清楚题目是讨论队列还是共享内存,应该是共享内存。
队列:
kernel.msgmnb 一个消息队列中的最大byte数,默认65536
kenrel.msgmin 最大的消息队列数
kernel.msgmax 最大的可以再进程间传递的消息尺寸,默认65536
共享内存
kernel.shmmni 最大的共享内存段的个数,单位是bytes
kernel.shmmax 最大的可以创建的共享内存段的大小,单位是bytes
kernel.shmall 全局最多可以使用的内存,单位是page,默认为4G,4294967296
一个page 是4096,4KiB
解:[root@serverx 442]# vim /f
kernel.shmmax = 1395864371 (1.3 * 2^30) (1.3是1到1.5之间的一个数字)
[root@serverx 442]# sysctl -p
静态优先级27——使用(round robin priority scheduling)。该程序应该作为后台作业运行
解:
vim /etc/rc.local
chrt –r 27 /usr/local/bin &
解:ps axo pid,rss | grep PID
结果里rss的单位是KiB,除以4得页面数,可以用下面的命令确定页面大小以防万一:getconf PAGE_SIZE
8.在root的目录下有文件count_jiffies.stp。配置系统能够运行这个脚本。
debuginfo-install kernel-2.6.32-131.0.15.el6.x86_64
yum install systemtap
stap count_jiffies.stp
<账户的目录有两个版本的应用程序:cache-a和cache-b。两个版本的应用程序功能一样,但是其中一个在使用
缓存方面不合理。
确认哪个应用程序有更好的缓存性能并复制这个程序到/usr/local/bin。
你可以自行选择哪个(些)应用程序用于实现这一目标。需要注意的是,某些应用程序不是所有硬件都能支持的。
(第10题,看程序的miss值,一模一样,不变)
答:#valgrind --tool=cachegrind /root/cache-a
# valgrind --tool=cachegrind /root/cache-b
在结果中对比,cache程序的命中率,小的即可得到答案。
10.配置网络缓存使得每个UDP连接(输入、输出都包括),保证能有最小128 KiB最大192KiB的缓存
解:vim /f
net.ipv4.udp_rmem_min = 131072
net.ipv4.udp_wmem_min = 131072
11.配置sar每2分钟一次,计划任务配置
vim /etc/cron.d/systat
*/2 * * * * root /usr/lib64/sa/sa1 1 1
12.系统应该有2 GiB的交换空间,现有512MiB。配置足够的交换空间并满足如下要求:
不删除任何现存swap分区
额外的swap空间应该均匀分布在两个分区上(同等大小)
新的swap分区应该在当前swap分区所在的那个磁盘上
在引导时,内核应该在使用现存的swap之前,使用新的swap分区
解:使用LVM可以进行准确的分配大小,两个,一个768MiB
如果是在线添加的虚拟盘或者是阵列给出的LUN,可以用以下命令刷出新硬盘:
echo "- - -" > /sys/class/scsi_host/host0/scan
解答过程如下:
732 fdisk -cu /dev/sdb n e 1 n l 5 t 8e w
分个1800M的分区出来,足够放两个768的LVM盘
最好用extend分区上建的逻辑分区,以防后面有需求不够用。但是后面没了。
737 pvcreate /dev/sdb5
738 lvmdiskscan
740 vgcreate -s 1M vgswap /dev/sdb5
741 lvcreate --help
742 lvcreate -l 768 vgswap -n swap1
743 lvcreate -l 768 vgswap -n swap2
744 mkswap /dev/mapper/vgswap-swap1
745 mkswap /dev/mapper/vgswap-swap2
746 blkid
747 swapon -p 5 /dev/mapper/vgswap-swap1
748 swapon -p 10 /dev/mapper/vgswap-swap2
749 swapon -s
750 vim /etc/fstab
最后用uuid写入/etc/fstab:
UUID=XXX swap swap pri=5 0 0
13.这个系统和其它系统之间的绝大多数网络连接都将经由一个低地轨道卫星链路。连接的延迟为500毫秒,带宽为
1.5Mib/s(mebibits/second)。调整系统,使得所有的TCP连接都能:(第十一章)
●用于缓存每个连接的内存的最小值,足够适用于这个延迟以及带宽
●用于缓存每个连接的内存的缺省值等于用于缓存的内存的最小值
●用于缓存每个连接的内存的最大值,等于1.5倍用于缓存的内存的最小值
(传输延迟500ms,带宽1.5M/s,使所有的TCP连接对于延迟带宽每一个连接最小的缓冲区可以使用内存总数足够大)解: (1.5/1)*(0.5/1)*(1/8)*(2^20/1)= 98304 bytes
#vim /f
p_mem = 24 24 36
p_rmem = 98304 98304 147456
p_wmem = 98304 98304 147456
#sysctl -p
14.在/usr/local/bin目录有两个程序:memapp1和memapp2。用户memhog应该能够运行memapp1但是不能运行
memapp2或者其它任何具有和memapp2一样特征的应用程序。
解:我们以限制memlog用户运行bc程序为例:
先使用memlog用户运行起bc,然后切到root用户
[root@serverx ~]# ps -eaf | grep memlog
root 5505 3055 0 13:31 pts/0 00:00:00 su - memlog
memlog 5506 5505 0 13:31 pts/0 00:00:00 -bash
memlog 5707 5506 0 13:35 pts/0 00:00:00 bc
root 6213 5320 0 13:42 pts/1 00:00:00 grep memlog
[root@serverx ~]# pmap -x 5707
5707: bc
Address Kbytes RSS Dirty Mode Mapping
00007fffa5fff000    4    4 0 r-x-- [ anon ]
ffffffffff600000    4 0 0 r-x-- [ anon ]
-
--------------- ------ ------ ------
total kB 130681112 272
那么13068 KiB便是memlog运行bc所占用的全部地址空间,限制一个稍小的值。
注意f里面对于as的限制值的单位也是KiB
# vim /etc/f
memlog hard as 10232
#su – memlog
# bc
bc: error while loading shared libraries: libtinfo.so.5: failed to map segment from shared object: Cannot allocate memory
15.配置系统使得已经被修改的数据能够在被考虑流入磁盘前,在内存中保留1分钟。
解:[root@serverx ~]# sysctl -a | grep dirty
vm.dirty_background_ratio = 10
vm.dirty_background_bytes = 0
vm.dirty_ratio = 20
vm.dirty_bytes = 0
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000
需要更改结果中最后两行,单位是ms毫秒,0。01秒为1毫秒,1 s=100 ms
#vim /f
vm.dirty_expire_centisecs = 6000
vm.dirty_writeback_centisecs = 6000
sysctl -p
16.在root目录中有一个压缩包,名为包含了一个客户端-服务器应用程序。该文件包含了两个版本的
服务器应用程序,是server-v1和server-v2,以及一个客户端应用程序client。这些程序都被设计为在同一个系统上使用。客户应用程序能够接受键盘输入并且发送到服务器,输入ctrl-D,将结束客户端程序。两个版本的服务器应用程序做的事情一样:它们接受来自客户端的输入并且复制到文件/tmp/application.out。一旦进入生产环节,服务器应用程序将会运行很长时间而不能重新启动,并且,一般地来说它每天需要处理数百个连接请求。你必须分析每个服务器应用程序并且识别最佳的那个服务器应用程序。一旦您决定使用某个版本的服务器应用程序,复制您选择的那个应用程序到/usr/local/bin。
tcpip详解卷二pdf解:办法1
运行server-v1前,free -m,记下结果,然后连上客户端,敲点东西,然后断了程序,看看内存是多少
server-v2是一样来看,结果会有一个中断后有好多内存回不去。那回不去的就是有问题。
办法2
#valgrind --tool=memcheck ./ application/server-v1
# valgrind --tool=memcheck ./ application/server-v2
会有一个出现严重的LEAK,选择没有Leak的即可
17.系统要升级硬件了,是SCSI控制器和一个SCSI磁带备份设备。请确保SCSI磁带控制器模块(st.ko)的加载,缺省
缓存大小需要设置为128 KiB。会给一个验证是否正确的程序。
解:首先添加参数设置
#vim /etc/modprobe.f添加,
options st buffer_kbs=128 注意等号前后不要有空格,和f里面不一样。
#ldconfig

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。