Freebsd 6下修改单进程最大内存参数

Linux 2007/04/30 15:32
原来在32位的freebsd 4下,单进程最大使用的内存数是: 512M 左右.通过修改kern.maxdsiz可以改变这个参数。
升级成 64位freebsd 6 os以后,我们通过ulimit -a命令查看系统设置:

-bash-2.05b$ ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) 33554432
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 29491
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 524288
cpu time (seconds, -t) unlimited
max user processes (-u) 3686
virtual memory (kbytes, -v) unlimited

发现 data seg size 已经支持到33G了,和ulimited几乎没差别了。可是运行一段时间後,发现还是存在进程莫名其妙的消失的情况。仔细一查才知道这个只能确保64位程序内存使用的情况,如果32位的程序在上面运行,需要修改2个参数才能确保内存的使用 。通过sysctl -a |grep maxdsiz可以发现:

compat.ia32.maxdsiz: 1700000000
compat.linux32.maxdsiz: 1700000000

默认好像也是512M,上面是我调整以后的,调到1.7G了。呵呵。修改的办法是把这些放到/etc/sysctl.conf.local里面或者直接用sysctl命令来设置这2个参数。

top

Freebsd4支持大内存

Linux 2007/04/18 17:47
修改/boot/loader.conf.local
添加:
kern.maxdsiz="1700000000" #每个进程最大使用的内存数,默认是512M,这里修改成1.7G
kernel="/kernel.PAE" #设置内核启动模式,用PAE模式支持4G以上内存
kern.maxswzone="18352640"
kern.nswapdev=1

top

Bash 的快捷键

Linux 2006/12/18 22:03
Linux 的缺省 Shell 就是 Bash,熟练运用下面的快捷键将对提高 Bash 的操作有很多好处。

这些快捷键有:
Ctrl + A : 光标移到行首。
Ctrl + E : 光标移到行尾。
Ctrl + L : 清屏。
Ctrl + U : 清除光标前至行首间的所有内容。
Ctrl + H : 同 backspace 键相同。
Ctrl + R : 搜索之前打过的命令。
Ctrl + C : 杀死当前进程。
Ctrl + D : 退出当前 Shell。
Ctrl + Z : 把当前进程转到后台运行,使用’ fg ‘命令恢复。
Ctrl + W : 移除光标前的一个单词
Ctrl + K : 清除光标后至行尾的内容。
Ctrl + T : 交换光标位置前的两个字符。
Esc + T : 交换光标位置前的两个单词。
Alt + F : 在当前行把光标向前移一个单词。
Alt + B : 在当前行把光标向后移一个单词。
Tab : 自动补完命令
top

FreeBSD下一个网卡绑定多个IP地址

Linux 2006/11/30 09:42
直接使用ifconfig为lo0添加一个alias:
sudo ifconfig lo0 inet 202.165.103.233 netmask 255.255.255.255 alias
去掉这个alias:
sudo ifconfig lo0 inet 202.165.103.233 netmask 255.255.255.255 -alias

机器启动时自动添加这个alias:
在/etc/rc.conf文件中加入
ifconfig_lo0_alias0=”inet 202.165.103.233 netmask 255.255.255.255″

昨天就是就按照这个来操作,不过以为是文档有错误,所以自做聪明的把255.255.255.255改成了255.255.255.0。加是加上了,可是加上以后,所有关于网络的操作都变得很慢。可是ping和traceroute都很正常。不理解为啥。查了查文档,发现了下面的说明:

一个网卡绑定多个ip时不要把两个地址设置在同一个网段,如果确实要求两个地址在同一个网段,把“虚拟地址”网络掩码设置为255.255.255.255。如果位于不同的子网,那么就直接使用相应子网的正常网络掩码。

从TCP/IP的角度来说说原因吧。网络掩码的所有位都是1,就会保证TCP/IP这样来看待数据包:只要包的目的地址匹配所有位,就把该包看成本地子网上的包,它实际上是创建了一个只有一个地址的“子网”。所有发送给该地址的包以及该地址接收的包都会发送给路由器,而不会发送到LAN上。如果多个别名使用了同一个网络掩码,这些别名的广播地址也应该相同,而这样就导致了TCP/IP栈的混乱。使用全1的网络掩码,我们才能骗过ifconfig,让该命令允许单个接卡上有多个IP地址。

top

在Netapp的filer上跑oracle数据库

Linux 2006/11/20 14:16
我们部门搞了1个Netapp的fs980,很爽的一台设备,可惜不给我在上面开帐号,只能给开空间。不爽啊~
我们的dba准备用这上面的空间来跑1个oracle的应用。不过发现在使用rman来恢复数据的时候,oracle出错了,具体的出错信息如下:

RMAN-03002: failure of restore command at 11/20/2006 12:18:15
ORA-19504: failed to create file "/sdb1/oradata/x_indx02.dbf"
ORA-27086: skgfglk: unable to lock file - already in use
Linux Error: 37: No locks available
Additional information: 8

Google/Yahoo弄了半天,没有太合适的答案,不过应该能定位问题应该出在nfs空间上。因为在本地空间或者SAN上面都没有这种问题。最后总算从suse的一个maillist中找到了点线索,按照下面的方式重新mount了一下数据表所在的nfs区域,加上nolock选项,一切都了正常了。

sudo mount -t nfs -o tcp,nolock,hard,intr nfs1.xxx.com:/vol/test1 /sdb1

为啥要加这个nolock实在还是不明白。查了一下mount命令,估计还是和fs980的nfs的格式有些问题吧。下次有空再仔细研究一下。
附带把这个记下:常用NFS mount选项介绍

top

AT model使用gnokii来收取短消息

Linux 2006/11/20 10:13
最近继续研究我们的那个at model无法读取短信的问题。
问题1:
每次使用gnokii --getsms SM 1命令来读取短信的时候,都会出现GetSMS SM 1 failed! (Command failed.) 的错误提示。用各大搜索引擎搜索了一下。总算在google上找到合适的方法。还是最近有人在gnokii-users mailing list上提出的bug。看来rp还不错,:D
主要出问题的原因就是AT指令错误。我们的AT model只能接受如下所示的指令:
AT+CPMS="SM","SM"
AT+CPMS="ME","ME"
而gnokii发送的指令却是这样的:
AT+CPMS="SM","SM","SM"
AT+CPMS="ME","ME","ME"
因此导致出错了,无法正常读取信息。需要修改源代码common/phones/atgen.c的function AT_SetSMSMemoryType()。然后重新make&&make install。

问题2:
使用gnokii附带的smsd程序来收发短信。smsd是一个后台运行的程序,会循环读取数据库或者文件,把需要发送的消息放入数据库或者文件中,smsd就会帮你发送出去,而收到的短信也会自动帮你存入数据库或者文件中。这样就可以很方便的在上面做2次开发。对我来说,这是一个很有用的工具。不过使用的过程中,发现有如下错误提示,导致无法成功运行:
GN_OP_GetSMSStatus at line 400 in file lowlevel.c returns error 1
Restarting connection.Serial device: closing device
幸运的是,在gnokii-users mailing list中还是成功的找到了解决的办法。还是gnokii的一个小bug,需要修改common/phones/atgen.c,具体的方法太繁琐,就不细说了。我把我修改后的atgen.c共享出来,有需要的同学可以自己下载。有兴趣的同学可以参看下面的链接,里面有关于这2个问题的详细讨论。
下载atgen.c

相关链接如下:
http://www.nabble.com/smsd-problem-with-AT-model-tf2174662.html#a6054611
http://www.nabble.com/smsd-problem-with-AT-model---Part-II-t2387168.html
top

在shell下去掉一个文件中的换行符

Linux 2006/10/26 17:18
自己想了半天没想出来,找到了2个bt的方法:
awk 'BEGIN{x=""}{x=x$0}END{print x}' filename
cat filename | xargs | sed 's/ / /g'
top