Tag Archives: Linux

top命令显示的VIRT列详解

在Linux下使用top命令查看进程时,经常可以发现Java应用的虚拟内存(即VIRT这一列)占用很高,如下:

PID   USER   PR   NI   VIRT     RES     SHR    S   %CPU  %MEM TIME+    COMMAND
5626  admin  20   0     9009m  496m   7072   S     1.8        6.3        355:00.79     java

这个VIRT代表啥意思呢?昨天看过StackOverFlow一条问题的解释后,这块算是彻底弄明白了。
上面的几列中,RES表示进程实际使用的内存,如果这个值很大则表示使用了大量实际内存,需要引起注意。
而VIRT的具体解释如下:
The total amount of virtual memory used by the task. It includes all code,data and shared libraries plus pages that have been swapped out.
这段解释的意思是VIRT表示进程所有使用过的代码,数据,共享库等等,这其中的许多数据或许已经从内存交换到硬盘上面,很少使用了。
使用pmap pid 可以显示出这个进程曾经使用过的虚拟内存映射。rwx–表示一般的数据空间,r-x–表示常驻磁盘的数据。
具体pmap的详细解释还是得翻看一下man文档。

ssh免输入密码登录

三周前借了一本《linux 网络管理员指南》,今天看了其中关于ssh的一章节。学会了如何免输密码登录ssh服务器。百淘时和章文嵩博士聊天时,他曾经给我讲述过怎么免输密码登录ssh,但是当时没听明白:(,现在总算明白了:)。 这个功能很好用,可以节约很多的输入密码的时间,不过在公司的环境下给的用户权限不足,不能进行设置,只能继续老老实实输入密码。测试环境是:Ubuntu9.10 + MacBookPro,其中Ubuntu9.10作为服务器,Mac作为客户端。

下面是具体的操作步骤,很精简,实用。
首先在sshd服务器端产生主机密钥,使用如下命令:

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N “”
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N “”

-N指服务器端”密码短语”,一般不需要使用。上述两个命令只要选择一个即可,更多的时候在Linux安装好之后,这些文件都已经生成好了,在/etc/ssh/目录下.如下:

star@star:/etc/ssh$ ls
moduli sshd_config ssh_host_dsa_key.pub ssh_host_rsa_key.pub
ssh_config ssh_host_dsa_key ssh_host_rsa_key

在客户端机器上通过下面命令生成个人的私钥和公钥 :
ssh-keygen -t rsa
ssh-keygen -t dsa

上述命令生成的私钥和公钥存放在 ~/.ssh/目录下:

starMacBookPro:.ssh star$ ls
id_dsa id_dsa.pub known_hosts

要实现免输入密码登录到服务器上,只需要将这个id_dsa.pub公钥写入到sshd服务器的~/.ssh/authorized_keys2的文件中,注意是写入这个文件,而不是复制到这个文件夹下。

可以使用下面的命令来实现:

starMacBookPro:.ssh star$ cat id_dsa.pub | ssh 192.168.1.102 “cat – >> ~/.ssh/authorized_keys2″

当然也可以将这个文件拷贝到服务器上,在cat id_dsa.pub >> ~/.ssh/authorized_keys2 来完成。
完成上述操作之后直接键入下面命令就可以登录到SSH服务器上了,不再需要输入密码了:)。

starMacBookPro:.ssh star$ ssh 192.168.1.102

Last login: Sun Jan 31 17:23:40 2010 from starmacbookpro.local
star@star:~$

通过脚本提高效率

以前看到过一种说法,找到不两个系统完全一样的Linux用户,因为每个人都会定制些自己工具,脚本等。其中最常见的就是增加一些alias了,我觉得仅仅增加一些alias是远远不够的,除了shell本身提供的那些命令外,还有很多重复日常工作需要通过写脚本完成。最近在学python,深深为python的简洁所吸引,也发现它天生就与Linux相配,用它来写一些脚本比用shell更加灵活。

在Ubuntu上我自己摸索出了一条管理这些脚本的方法。 在/home/star/下面建了个script/bin目录,然后将这个目录加到PATH中,以后写好一个脚本后,只要放到bin下面就可以直接使用了,不用再关心路径等问题了。 我目前积累的脚本还不多,用得最多的是ssh和ftp登录dreamhost的脚本,以及一个用来批量转换文件编码的脚本。 另外还可以用这个方式来管理自己安装的一些软件的启动(我不喜欢系统apt安装的apache,jdk,mysql等东西),如argouml,apachectl,tomcat,jboss等,只要建个指向原来启动脚本的软链接就行了。通过这种方式可以很好的管理不是直接通过apt安装的软件,不需要去找每个软件的bin目录下启动了。

最后贴我写的ssh登录dreamhost的脚本:

#!/usr/bin/expect -f

spawn ssh abc@greengoblin.dreamhost.com

expect “*password”

send “XXXXXX\r”

send “\r”

expect eof

interact