<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>飘渺的风</title>
	<atom:link href="http://www.huanxiangwu.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.huanxiangwu.com</link>
	<description>个人的生活，学习，工作感悟</description>
	<lastBuildDate>Fri, 24 Jun 2011 08:32:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Nginx优化（配置文件&amp;内核参数）Nginx optimization (Profile &amp; Kernel parameters)</title>
		<link>http://www.huanxiangwu.com/699/nginx-optimization</link>
		<comments>http://www.huanxiangwu.com/699/nginx-optimization#comments</comments>
		<pubDate>Tue, 31 May 2011 07:01:11 +0000</pubDate>
		<dc:creator>huanxiangwu</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[nginx优化]]></category>

		<guid isPermaLink="false">http://www.huanxiangwu.com/?p=699</guid>
		<description><![CDATA[nginx指令中的优化（配置文件） worker_processes 8; nginx进程数，建议按照cpu数目来指定，一般为它的倍数。 worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; 为每个进程分配cpu，上例中将8个进程分配到8个cpu，当然可以写多个，或者将一个进程分配到多个cpu。 worker_rlimit_nofile 102400; 这个指令是指当一个nginx进程打开的最多文件描述符数目，理论值应该是最多打开文件数（ulimit -n）与nginx进程数相除，但是nginx分配请求并不是那么均匀，所以最好与ulimit -n的值保持一致。 use epoll; 使用epoll的I/O模型，这个不用说了吧。 worker_connections 102400; 每个进程允许的最多连接数，理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。 keepalive_timeout 60; keepalive超时时间。 client_header_buffer_size 4k; 客户端请求头部的缓冲区大小，这个可以根据你的系统分页大小来设置，一般一个请求的头部大小不会超过1k，不过由于一般系统分页都要大于1k，所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。 open_file_cache max=102400 inactive=20s; 这个将为打开文件指定缓存，默认是没有启用的，max指定缓存数量，建议和打开文件数一致，inactive是指经过多长时间文件没被请求后删除缓存。 open_file_cache_valid 30s; 这个是指多长时间检查一次缓存的有效信息。 open_file_cache_min_uses 1; open_file_cache指令中的inactive参数时间内文件的最少使用次数，如果超过这个数字，文件描述符一直是在缓存中打开的，如上例，如果有一个文件在inactive时间内一次没被使用，它将被移除。 内核参数的优化 net.ipv4.tcp_max_tw_buckets = 6000 timewait的数量，默认是180000。 net.ipv4.ip_local_port_range = 1024 65000 允许系统打开的端口范围。 net.ipv4.tcp_tw_recycle = 1 [...]]]></description>
			<content:encoded><![CDATA[<p><!--:zh--><strong>nginx指令中的优化（配置文件）</strong></p>
<p>worker_processes 8;<br />
nginx进程数，建议按照cpu数目来指定，一般为它的倍数。</p>
<p>worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;<br />
为每个进程分配cpu，上例中将8个进程分配到8个cpu，当然可以写多个，或者将一个进程分配到多个cpu。</p>
<p>worker_rlimit_nofile 102400;<br />
这个指令是指当一个nginx进程打开的最多文件描述符数目，理论值应该是最多打开文件数（ulimit -n）与nginx进程数相除，但是nginx分配请求并不是那么均匀，所以最好与ulimit -n的值保持一致。</p>
<p>use epoll;<br />
使用epoll的I/O模型，这个不用说了吧。</p>
<p>worker_connections 102400;<br />
每个进程允许的最多连接数，理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。</p>
<p>keepalive_timeout 60;<br />
keepalive超时时间。</p>
<p>client_header_buffer_size 4k;<br />
客户端请求头部的缓冲区大小，这个可以根据你的系统分页大小来设置，一般一个请求的头部大小不会超过1k，不过由于一般系统分页都要大于1k，所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。</p>
<p>open_file_cache max=102400 inactive=20s;<br />
这个将为打开文件指定缓存，默认是没有启用的，max指定缓存数量，建议和打开文件数一致，inactive是指经过多长时间文件没被请求后删除缓存。</p>
<p>open_file_cache_valid 30s;<br />
这个是指多长时间检查一次缓存的有效信息。</p>
<p>open_file_cache_min_uses 1;<br />
open_file_cache指令中的inactive参数时间内文件的最少使用次数，如果超过这个数字，文件描述符一直是在缓存中打开的，如上例，如果有一个文件在inactive时间内一次没被使用，它将被移除。</p>
<p><strong>内核参数的优化</strong></p>
<p>net.ipv4.tcp_max_tw_buckets = 6000<br />
timewait的数量，默认是180000。</p>
<p>net.ipv4.ip_local_port_range = 1024    65000<br />
允许系统打开的端口范围。</p>
<p>net.ipv4.tcp_tw_recycle = 1<br />
启用timewait快速回收。</p>
<p>net.ipv4.tcp_tw_reuse = 1<br />
开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。</p>
<p>net.ipv4.tcp_syncookies = 1<br />
开启SYN Cookies，当出现SYN等待队列溢出时，启用cookies来处理。</p>
<p>net.core.somaxconn = 262144<br />
web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128，而nginx定义的NGX_LISTEN_BACKLOG默认为511，所以有必要调整这个值。</p>
<p>net.core.netdev_max_backlog = 262144<br />
每个网络接口接收数据包的速率比内核处理这些包的速率快时，允许送到队列的数据包的最大数目。</p>
<p>net.ipv4.tcp_max_orphans = 262144<br />
系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字，孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击，不能过分依靠它或者人为地减小这个值，更应该增加这个值(如果增加了内存之后)。</p>
<p>net.ipv4.tcp_max_syn_backlog = 262144<br />
记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言，缺省值是1024，小内存的系统则是128。</p>
<p>net.ipv4.tcp_timestamps = 0<br />
时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。</p>
<p>net.ipv4.tcp_synack_retries = 1<br />
为了打开对端的连接，内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。</p>
<p>net.ipv4.tcp_syn_retries = 1<br />
在内核放弃建立连接之前发送SYN包的数量。</p>
<p>net.ipv4.tcp_fin_timeout = 1<br />
如果套接字由本端要求关闭，这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接，甚至意外当机。缺省值是60秒。2.2 内核的通常值是180秒，你可以按这个设置，但要记住的是，即使你的机器是一个轻载的WEB服务器，也有因为大量的死套接字而内存溢出的风险，FIN- WAIT-2的危险性比FIN-WAIT-1要小，因为它最多只能吃掉1.5K内存，但是它们的生存期长些。</p>
<p>net.ipv4.tcp_keepalive_time = 30<br />
当keepalive起用的时候，TCP发送keepalive消息的频度。缺省是2小时。</p>
<p><strong>一个完整的内核优化配置</strong></p>
<pre class="brush: bash; title: ; notranslate">
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096        87380   4194304
net.ipv4.tcp_wmem = 4096        16384   4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024    65000
</pre>
<p><strong>一个简单的nginx优化配置文件</strong></p>
<pre class="brush: bash; title: ; notranslate">
user  www www;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
error_log  /www/log/nginx_error.log  crit;
pid        /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 204800;

events
{
use epoll;
worker_connections 204800;
}

http
{
include       mime.types;
default_type  application/octet-stream;

charset  utf-8;

server_names_hash_bucket_size 128;
client_header_buffer_size 2k;
large_client_header_buffers 4 4k;
client_max_body_size 8m;

sendfile on;
tcp_nopush     on;

keepalive_timeout 60;

fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2
keys_zone=TEST:10m
inactive=5m;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 16k;
fastcgi_buffers 16 16k;
fastcgi_busy_buffers_size 16k;
fastcgi_temp_file_write_size 16k;
fastcgi_cache TEST;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale error timeout invalid_header http_500;

open_file_cache max=204800 inactive=20s;
open_file_cache_min_uses 1;
open_file_cache_valid 30s;

tcp_nodelay on;

gzip on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types       text/plain application/x-javascript text/css application/xml;
gzip_vary on;

server
{
listen       8080;
server_name  ad.test.com;
index index.php index.htm;
root  /www/html/;

location /status
{
stub_status on;
}

location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
expires      30d;
}

log_format  access  '$remote_addr - $remote_user [$time_local] &quot;$request&quot; '
'$status $body_bytes_sent &quot;$http_referer&quot; '
'&quot;$http_user_agent&quot; $http_x_forwarded_for';
access_log  /www/log/access.log  access;
}
}
</pre>
<p>转自：http://www.howtocn.org/nginx:%E9%85%8D%E7%BD%AE%E4%B8%80%E4%B8%AA%E9%AB%98%E6%80%A7%E8%83%BD%E7%9A%84nginx_fastcgi%E6%9C%8D%E5%8A%A1%E5%99%A8<!--:--><!--:en--><strong>nginx指令中的优化（配置文件）</strong></p>
<p>worker_processes 8;<br />
nginx进程数，建议按照cpu数目来指定，一般为它的倍数。</p>
<p>worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;<br />
为每个进程分配cpu，上例中将8个进程分配到8个cpu，当然可以写多个，或者将一个进程分配到多个cpu。</p>
<p>worker_rlimit_nofile 102400;<br />
这个指令是指当一个nginx进程打开的最多文件描述符数目，理论值应该是最多打开文件数（ulimit -n）与nginx进程数相除，但是nginx分配请求并不是那么均匀，所以最好与ulimit -n的值保持一致。</p>
<p>use epoll;<br />
使用epoll的I/O模型，这个不用说了吧。</p>
<p>worker_connections 102400;<br />
每个进程允许的最多连接数，理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。</p>
<p>keepalive_timeout 60;<br />
keepalive超时时间。</p>
<p>client_header_buffer_size 4k;<br />
客户端请求头部的缓冲区大小，这个可以根据你的系统分页大小来设置，一般一个请求的头部大小不会超过1k，不过由于一般系统分页都要大于1k，所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。</p>
<p>open_file_cache max=102400 inactive=20s;<br />
这个将为打开文件指定缓存，默认是没有启用的，max指定缓存数量，建议和打开文件数一致，inactive是指经过多长时间文件没被请求后删除缓存。</p>
<p>open_file_cache_valid 30s;<br />
这个是指多长时间检查一次缓存的有效信息。</p>
<p>open_file_cache_min_uses 1;<br />
open_file_cache指令中的inactive参数时间内文件的最少使用次数，如果超过这个数字，文件描述符一直是在缓存中打开的，如上例，如果有一个文件在inactive时间内一次没被使用，它将被移除。</p>
<p><strong>内核参数的优化</strong></p>
<p>net.ipv4.tcp_max_tw_buckets = 6000<br />
timewait的数量，默认是180000。</p>
<p>net.ipv4.ip_local_port_range = 1024    65000<br />
允许系统打开的端口范围。</p>
<p>net.ipv4.tcp_tw_recycle = 1<br />
启用timewait快速回收。</p>
<p>net.ipv4.tcp_tw_reuse = 1<br />
开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。</p>
<p>net.ipv4.tcp_syncookies = 1<br />
开启SYN Cookies，当出现SYN等待队列溢出时，启用cookies来处理。</p>
<p>net.core.somaxconn = 262144<br />
web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128，而nginx定义的NGX_LISTEN_BACKLOG默认为511，所以有必要调整这个值。</p>
<p>net.core.netdev_max_backlog = 262144<br />
每个网络接口接收数据包的速率比内核处理这些包的速率快时，允许送到队列的数据包的最大数目。</p>
<p>net.ipv4.tcp_max_orphans = 262144<br />
系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字，孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击，不能过分依靠它或者人为地减小这个值，更应该增加这个值(如果增加了内存之后)。</p>
<p>net.ipv4.tcp_max_syn_backlog = 262144<br />
记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言，缺省值是1024，小内存的系统则是128。</p>
<p>net.ipv4.tcp_timestamps = 0<br />
时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。</p>
<p>net.ipv4.tcp_synack_retries = 1<br />
为了打开对端的连接，内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。</p>
<p>net.ipv4.tcp_syn_retries = 1<br />
在内核放弃建立连接之前发送SYN包的数量。</p>
<p>net.ipv4.tcp_fin_timeout = 1<br />
如果套接字由本端要求关闭，这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接，甚至意外当机。缺省值是60秒。2.2 内核的通常值是180秒，你可以按这个设置，但要记住的是，即使你的机器是一个轻载的WEB服务器，也有因为大量的死套接字而内存溢出的风险，FIN- WAIT-2的危险性比FIN-WAIT-1要小，因为它最多只能吃掉1.5K内存，但是它们的生存期长些。</p>
<p>net.ipv4.tcp_keepalive_time = 30<br />
当keepalive起用的时候，TCP发送keepalive消息的频度。缺省是2小时。</p>
<p><strong>一个完整的内核优化配置</strong></p>
<pre class="brush: bash; title: ; notranslate">
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096        87380   4194304
net.ipv4.tcp_wmem = 4096        16384   4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024    65000
</pre>
<p><strong>一个简单的nginx优化配置文件</strong></p>
<pre class="brush: bash; title: ; notranslate">
user  www www;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
error_log  /www/log/nginx_error.log  crit;
pid        /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 204800;

events
{
use epoll;
worker_connections 204800;
}

http
{
include       mime.types;
default_type  application/octet-stream;

charset  utf-8;

server_names_hash_bucket_size 128;
client_header_buffer_size 2k;
large_client_header_buffers 4 4k;
client_max_body_size 8m;

sendfile on;
tcp_nopush     on;

keepalive_timeout 60;

fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2
keys_zone=TEST:10m
inactive=5m;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 16k;
fastcgi_buffers 16 16k;
fastcgi_busy_buffers_size 16k;
fastcgi_temp_file_write_size 16k;
fastcgi_cache TEST;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale error timeout invalid_header http_500;

open_file_cache max=204800 inactive=20s;
open_file_cache_min_uses 1;
open_file_cache_valid 30s;

tcp_nodelay on;

gzip on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types       text/plain application/x-javascript text/css application/xml;
gzip_vary on;

server
{
listen       8080;
server_name  ad.test.com;
index index.php index.htm;
root  /www/html/;

location /status
{
stub_status on;
}

location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
expires      30d;
}

log_format  access  '$remote_addr - $remote_user [$time_local] &amp;amp;quot;$request&amp;amp;quot; '
'$status $body_bytes_sent &amp;amp;quot;$http_referer&amp;amp;quot; '
'&amp;amp;quot;$http_user_agent&amp;amp;quot; $http_x_forwarded_for';
access_log  /www/log/access.log  access;
}
}
</pre>
<p>转自：http://www.howtocn.org/nginx:%E9%85%8D%E7%BD%AE%E4%B8%80%E4%B8%AA%E9%AB%98%E6%80%A7%E8%83%BD%E7%9A%84nginx_fastcgi%E6%9C%8D%E5%8A%A1%E5%99%A8<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.huanxiangwu.com/699/nginx-optimization/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache2 KeepAlive详解</title>
		<link>http://www.huanxiangwu.com/696/apache2-keepalive</link>
		<comments>http://www.huanxiangwu.com/696/apache2-keepalive#comments</comments>
		<pubDate>Fri, 20 May 2011 01:39:44 +0000</pubDate>
		<dc:creator>huanxiangwu</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[keepalive]]></category>

		<guid isPermaLink="false">http://www.huanxiangwu.com/?p=696</guid>
		<description><![CDATA[Apache Keep-Alive扩展源自自HTTP/1.0和HTTP/1.1标准的的持久链接特性。提供了相对长效的HTTP链接方式，用以在同一个TCP连接中进行多次HTTP请求。KeepAlive设置出现在Apache 1.2版本以后。 对于HTTP/1.0的客户端来说，仅当客户端指定使用的时候才会使用持久链接连接。此外，仅当能够预先知道传输的内容长度时，才会与HTTP/1.0的客户端建立持久链接连接。而对于HTTP/1.1的客户端来说，如果没有进行特殊指定，持久将是默认的连接方式。如果客户端进行了请求，将使用数据分块以解决在持久链接里发送未知长度内容的问题。 KeepAliveTimeout的设置说明： Apache在关闭持久连接前等待下一个请求的秒数。一旦收到一个请求，超时值将会被设置为Timeout指令指定的秒数。 对于高负荷服务器来说，KeepAliveTimeout值较大会导致一些性能方面的问题：超时值越大，与空闲客户端保持连接的进程就越多。 MaxKeepAliveRequests的设置说明： MaxKeepAliveRequests指令限制了当启用KeepAlive时，每个连接允许的请求数量。如果将此值设为”0″，将不限制请求的数目。我们建议最好将此值设为一个比较大的值，以确保最优的服务器性能。 通过Apache的设置说明，我们明白在对于一个包含许多图片、css、js的静态内容网页， 客户端会在瞬间发出多个HTTP请求，此时多次建立TCP连接会大大降低响应速度且耗费服务器端资源。 此时通过持续连接，可以允许用户在一个TCP连接中发出多个HTTP请求， 减少TCP连接建立次数，提高响应速度。我们可以通过access log统计出连续HTTP请求出现的次数、间隔时间、访问量， 以确定MaxKeepAliveRequests 和 KeepAliveTimeout 的值。 KeepAliveTimeout 太小发挥不了持续连接的作用；太大了，该断开连接迟迟的在等待，不仅浪费TCP连接数，而且系统中的apache2的进程数目会因此不断增加，使得系统负载升高。 哪么什么决定着我们是不是要开启KeepAlive的因素就很简单了：就是用户一个页面请求中是否会引发向同一个apache2服务器发出多个HTTP的请求。 但是当你的服务器只是在处理动态网页请求时，由于用户很少会瞬间请求多个动态网页（一般都是打开页面之后阅读好半天才点下一页），此时打开KeepAlive无异于浪费TCP连接数。所以此时应该把KeepAlive off之。 而对于提供静态文件服务，例如图片或静态文件服务，如果一用户需要同时从这个服务上得到数个甚至数十个文件，那么KeepAlive不仅仅能减少TCP的链接请求，更能节省apache2的进程资源。 转自：http://www.qingran.net/2010/07/apache2-keepalive%E8%AF%A6%E8%A7%A3/]]></description>
			<content:encoded><![CDATA[<p>Apache Keep-Alive扩展源自自HTTP/1.0和HTTP/1.1标准的的持久链接特性。提供了相对长效的HTTP链接方式，用以在同一个TCP连接中进行多次HTTP请求。KeepAlive设置出现在Apache 1.2版本以后。</p>
<p>对于HTTP/1.0的客户端来说，仅当客户端指定使用的时候才会使用持久链接连接。此外，仅当能够预先知道传输的内容长度时，才会与HTTP/1.0的客户端建立持久链接连接。而对于HTTP/1.1的客户端来说，如果没有进行特殊指定，持久将是默认的连接方式。如果客户端进行了请求，将使用数据分块以解决在持久链接里发送未知长度内容的问题。</p>
<p>KeepAliveTimeout的设置说明：<br />
Apache在关闭持久连接前等待下一个请求的秒数。一旦收到一个请求，超时值将会被设置为Timeout指令指定的秒数。<br />
对于高负荷服务器来说，KeepAliveTimeout值较大会导致一些性能方面的问题：超时值越大，与空闲客户端保持连接的进程就越多。</p>
<p>MaxKeepAliveRequests的设置说明：<br />
MaxKeepAliveRequests指令限制了当启用KeepAlive时，每个连接允许的请求数量。如果将此值设为”0″，将不限制请求的数目。我们建议最好将此值设为一个比较大的值，以确保最优的服务器性能。</p>
<p>通过Apache的设置说明，我们明白在对于一个包含许多图片、css、js的静态内容网页， 客户端会在瞬间发出多个HTTP请求，此时多次建立TCP连接会大大降低响应速度且耗费服务器端资源。 此时通过持续连接，可以允许用户在一个TCP连接中发出多个HTTP请求， 减少TCP连接建立次数，提高响应速度。我们可以通过access log统计出连续HTTP请求出现的次数、间隔时间、访问量， 以确定MaxKeepAliveRequests 和 KeepAliveTimeout 的值。 KeepAliveTimeout 太小发挥不了持续连接的作用；太大了，该断开连接迟迟的在等待，不仅浪费TCP连接数，而且系统中的apache2的进程数目会因此不断增加，使得系统负载升高。</p>
<p>哪么什么决定着我们是不是要开启KeepAlive的因素就很简单了：就是用户一个页面请求中是否会引发向同一个apache2服务器发出多个HTTP的请求。</p>
<p>但是当你的服务器只是在处理动态网页请求时，由于用户很少会瞬间请求多个动态网页（一般都是打开页面之后阅读好半天才点下一页），此时打开KeepAlive无异于浪费TCP连接数。所以此时应该把KeepAlive off之。</p>
<p>而对于提供静态文件服务，例如图片或静态文件服务，如果一用户需要同时从这个服务上得到数个甚至数十个文件，那么KeepAlive不仅仅能减少TCP的链接请求，更能节省apache2的进程资源。</p>
<p>转自：http://www.qingran.net/2010/07/apache2-keepalive%E8%AF%A6%E8%A7%A3/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huanxiangwu.com/696/apache2-keepalive/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>python升级导致yum不可用的解决方法</title>
		<link>http://www.huanxiangwu.com/693/how-to-solve-the-causes-python-upgrade-yum-not-available</link>
		<comments>http://www.huanxiangwu.com/693/how-to-solve-the-causes-python-upgrade-yum-not-available#comments</comments>
		<pubDate>Thu, 07 Apr 2011 09:31:39 +0000</pubDate>
		<dc:creator>huanxiangwu</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[python降级]]></category>
		<category><![CDATA[yum重装]]></category>

		<guid isPermaLink="false">http://www.huanxiangwu.com/?p=693</guid>
		<description><![CDATA[今天需要在一台服务器上yum安装RRDTool，发现yum报错，不能使用 按照惯例，登陆服务器检查，发现python被人从2.4升级到了2.6,，使用yum报错：ImportError: No module named rpm 显示yum的python脚本无法导入rpm包 手动修改/usr/bin/yum脚本头部 将#!/usr/bin/python改成#!/usr/bin/python2.4 执行yum报错：Insufficient server config &#8211; no servers found. Aborting. 经过几番折腾，此处省略N多字。。。 最终找到解决办法： 1.使用rpm将python2.6降级，注意rpm -e掉python2.6后，需要将/usr/bin/下的python和python2做个软件到/usr/bin/python2.4 2.重新安装yum： rpm -ivh python-iniparse-0.2.3-4.el5.noarch.rpm rpm -ivh yum-metadata-parser-1.1.2-3.el5.centos.x86_64.rpm rpm -ivh yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm yum-3.2.22-26.el5.centos.noarch.rpm 3.清理一些垃圾源 最终yum update成功]]></description>
			<content:encoded><![CDATA[<p>今天需要在一台服务器上yum安装RRDTool，发现yum报错，不能使用<br />
按照惯例，登陆服务器检查，发现python被人从2.4升级到了2.6,，使用yum报错：ImportError: No module named rpm<br />
显示yum的python脚本无法导入rpm包<br />
手动修改/usr/bin/yum脚本头部<br />
将#!/usr/bin/python改成#!/usr/bin/python2.4<br />
执行yum报错：Insufficient server config &#8211; no servers found. Aborting.<br />
经过几番折腾，此处省略N多字。。。<br />
最终找到解决办法：<br />
1.使用rpm将python2.6降级，注意rpm -e掉python2.6后，需要将/usr/bin/下的python和python2做个软件到/usr/bin/python2.4<br />
2.重新安装yum：<br />
rpm -ivh python-iniparse-0.2.3-4.el5.noarch.rpm<br />
rpm -ivh yum-metadata-parser-1.1.2-3.el5.centos.x86_64.rpm<br />
rpm -ivh yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm yum-3.2.22-26.el5.centos.noarch.rpm<br />
3.清理一些垃圾源</p>
<p>最终yum update成功</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huanxiangwu.com/693/how-to-solve-the-causes-python-upgrade-yum-not-available/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian配置使用Dotdeb更新源</title>
		<link>http://www.huanxiangwu.com/676/debian%e9%85%8d%e7%bd%ae%e4%bd%bf%e7%94%a8dotdeb%e6%9b%b4%e6%96%b0%e6%ba%90</link>
		<comments>http://www.huanxiangwu.com/676/debian%e9%85%8d%e7%bd%ae%e4%bd%bf%e7%94%a8dotdeb%e6%9b%b4%e6%96%b0%e6%ba%90#comments</comments>
		<pubDate>Fri, 18 Mar 2011 08:19:20 +0000</pubDate>
		<dc:creator>huanxiangwu</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[apt-get]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[Dotdeb]]></category>

		<guid isPermaLink="false">http://www.huanxiangwu.com/?p=676</guid>
		<description><![CDATA[Debian官方的源一般都以稳定为主，所以里面的软件版本也相对比较低，Dotdeb的源更新速度比较快，而且里面的软件包都是最新稳定版的，所以我使用Debian一般都喜欢加入Dotdeb的源，安装最新的稳定版软件。 根据Dotdeb.org官方的使用说明，对照着英文大概翻译下Dotdeb源的使用方法： 1.根据你使用的Debian的发行版本（lenny/oldstable 或 squeeze/stable），在/etc/apt/sources.list文件中加入两行（选择最近的镜像站）： Squeeze : deb http://packages.dotdeb.org stable all deb-src http://packages.dotdeb.org stable all Lenny : deb http://packages.dotdeb.org oldstable all deb-src http://packages.dotdeb.org oldstable all 2.（可选）如果你使用Debian 5.0 “Lenny” 版本，而且你想使用PHP 5.3取代PHP 5.2，在/etc/apt/sources.list文件中添加如下所示的两行内容。： deb http://php53.dotdeb.org oldstable all deb-src http://php53.dotdeb.org oldstable all 注：如果你在使用Debian 6.0 “Squeeze” 版本就不用加了，因为PHP 5.3在Debian 6.0 “Squeeze”中默认就有 3.然后获取GnuPG 密钥 wget http://www.dotdeb.org/dotdeb.gpg cat dotdeb.gpg &#124; sudo apt-key [...]]]></description>
			<content:encoded><![CDATA[<p>Debian官方的源一般都以稳定为主，所以里面的软件版本也相对比较低，Dotdeb的源更新速度比较快，而且里面的软件包都是最新稳定版的，所以我使用Debian一般都喜欢加入Dotdeb的源，安装最新的稳定版软件。</p>
<p>根据Dotdeb.org官方的使用说明，对照着英文大概翻译下Dotdeb源的使用方法：</p>
<p>1.根据你使用的Debian的发行版本（lenny/oldstable 或 squeeze/stable），在/etc/apt/sources.list文件中加入两行（选择最近的镜像站）：<br />
Squeeze :<br />
deb http://packages.dotdeb.org stable all<br />
deb-src http://packages.dotdeb.org stable all<br />
Lenny :<br />
deb http://packages.dotdeb.org oldstable all<br />
deb-src http://packages.dotdeb.org oldstable all</p>
<p>2.（可选）如果你使用Debian 5.0 “Lenny” 版本，而且你想使用PHP 5.3取代PHP 5.2，在/etc/apt/sources.list文件中添加如下所示的两行内容。：<br />
deb http://php53.dotdeb.org oldstable all<br />
deb-src http://php53.dotdeb.org oldstable all<br />
注：如果你在使用Debian 6.0 “Squeeze” 版本就不用加了，因为PHP 5.3在Debian 6.0 “Squeeze”中默认就有</p>
<p>3.然后获取GnuPG 密钥<br />
wget http://www.dotdeb.org/dotdeb.gpg<br />
cat dotdeb.gpg | sudo apt-key add -</p>
<p>4.运行 apt-get update</p>
<p>5.最后就可以使用apt-get (dselect或aptitude等命令)使用Dotdeb的软件包了</p>
<p>参考：http://www.dotdeb.org/instructions/<br />
本文定期会根据官方的E文使用说明翻译更新</p>
<p><strong>附Dotdeb.org更新源的全球各地镜像：</strong></p>
<p>* Austria（奥地利）</p>
<p>deb http://dotdeb.gosi.at/ stable all<br />
deb-src http://dotdeb.gosi.at/ stable all</p>
<p>* Belgium（比利时）</p>
<p>deb http://dotdeb.debian.skynet.be/ stable all<br />
deb-src http://dotdeb.debian.skynet.be/ stable all</p>
<p>* Bulgaria（保加利亚）</p>
<p>deb http://dotdeb.ipacct.com/packages/ stable all<br />
deb-src http://dotdeb.ipacct.com/packages/ stable all</p>
<p>* Czech republic（捷克共和国）</p>
<p>deb http://debian-dotdeb.mirror.web4u.cz/ stable all<br />
deb-src http://debian-dotdeb.mirror.web4u.cz/ stable all</p>
<p>* France（法国）</p>
<p>deb http://packages.dotdeb.org stable all<br />
deb-src http://packages.dotdeb.org stable all</p>
<p>* Germany（德国）</p>
<p>deb http://ftp.hosteurope.de/mirror/packages.dotdeb.org/ stable all<br />
deb-src http://ftp.hosteurope.de/mirror/packages.dotdeb.org/ stable all</p>
<p>deb http://dotdeb.netmirror.org/ stable all<br />
deb-src http://dotdeb.netmirror.org/ stable all</p>
<p>* Japan（日本）</p>
<p>deb http://download.softagency.net/debian/dotdeb/ stable all<br />
deb-src http://download.softagency.net/debian/dotdeb/ stable all</p>
<p>* Netherlands（荷兰）</p>
<p>deb http://dotdeb.mirror.cambrium.nl/ stable all<br />
deb-src http://dotdeb.mirror.cambrium.nl/ stable all</p>
<p>* Romania（罗马尼亚）</p>
<p>deb ftp://download.srv.ro/pub/dotdeb/ stable all<br />
deb-src ftp://download.srv.ro/pub/dotdeb/ stable all</p>
<p>* Slovakia（斯洛伐克）</p>
<p>deb http://mirrors.mojhosting.sk/dotdeb/ stable all<br />
deb-src http://mirrors.mojhosting.sk/dotdeb/ stable all</p>
<p>* Switzerland（瑞士）</p>
<p>deb http://mirror.yux.ch/dotdeb/ stable all<br />
deb-src http://mirror.yux.ch/dotdeb/ stable all</p>
<p>* United Kingdom（英国）</p>
<p>deb http://dotdeb.mirror.somersettechsolutions.co.uk/ stable all<br />
deb-src http://dotdeb.mirror.somersettechsolutions.co.uk/ stable all</p>
<p>* USA (US/Canada/Mexico only)美国/加拿大/墨西哥</p>
<p>deb http://dotdeb.mirror.borgnet.us/ stable all<br />
deb-src http://dotdeb.mirror.borgnet.us/ stable all</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huanxiangwu.com/676/debian%e9%85%8d%e7%bd%ae%e4%bd%bf%e7%94%a8dotdeb%e6%9b%b4%e6%96%b0%e6%ba%90/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian简单配置SNMPD服务</title>
		<link>http://www.huanxiangwu.com/674/debian%e7%ae%80%e5%8d%95%e9%85%8d%e7%bd%aesnmpd%e6%9c%8d%e5%8a%a1</link>
		<comments>http://www.huanxiangwu.com/674/debian%e7%ae%80%e5%8d%95%e9%85%8d%e7%bd%aesnmpd%e6%9c%8d%e5%8a%a1#comments</comments>
		<pubDate>Thu, 17 Mar 2011 09:21:03 +0000</pubDate>
		<dc:creator>huanxiangwu</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[snmpd]]></category>

		<guid isPermaLink="false">http://www.huanxiangwu.com/?p=674</guid>
		<description><![CDATA[一、安装及配置相关软件包 修改主配置文件 据实际情况加入以下内容: 二、停止服务，添加v3用户 会有如下输出: adding the following line to /var/lib/snmp/snmpd.conf: createUser username MD5 &#8220;authpassword&#8221; DES privpassword adding the following line to /usr/share/snmp/snmpd.conf: rouser username 三、启动服务并在本地测试 四、修改配置允许其它主机访问 debian默认只在回环地址上侦听。修改非本地访问则需要修改/etc/default/snmpd文件，修改 SNMPDOPTS=&#8217;-lSD -lF /dev/null -u snmp -I -smux -p /var/run/snmp.pid 127.0.0.1&#8242; 删除 127.0.0.1，修改后为: 保存。 在其它主机上进行测试(其需要安装snmp包) 转自：http://www.unixaid.info/index.php/unixtecspt/27-netadmin/784-debiansnmpd.html]]></description>
			<content:encoded><![CDATA[<p>一、安装及配置相关软件包</p>
<pre class="brush: bash; title: ; notranslate">#apt-get install snmp snmpd</pre>
<p>修改主配置文件</p>
<pre class="brush: bash; title: ; notranslate"># vim /etc/snmp/snmpd.conf</pre>
<p>据实际情况加入以下内容:</p>
<pre class="brush: bash; title: ; notranslate">
rocommunity username 60.195.x.y
com2sec readonly 192.168.6.0/27 mycommunity
rouser username auth
</pre>
<p>二、停止服务，添加v3用户</p>
<pre class="brush: bash; title: ; notranslate">
#/etc/init.d/snmpd stop
#net-snmp-config --create-snmpv3-user -A authpassword -X privpassword username
</pre>
<p>会有如下输出:<br />
adding the following line to /var/lib/snmp/snmpd.conf:<br />
createUser username MD5 &#8220;authpassword&#8221; DES privpassword<br />
adding the following line to /usr/share/snmp/snmpd.conf:<br />
rouser username</p>
<p>三、启动服务并在本地测试</p>
<pre class="brush: bash; title: ; notranslate">
#invoke-rc.d snmpd start

#snmpwalk -v 3 -u username -l authNoPriv -a MD5 -A authpassword 127.0.0.1 system
#snmpwalk -v 3 -u username -l authPriv -a MD5 -A authpassword -x DES -X privpassword 127.0.0.1 system
</pre>
<p>四、修改配置允许其它主机访问<br />
debian默认只在回环地址上侦听。修改非本地访问则需要修改/etc/default/snmpd文件，修改<br />
SNMPDOPTS=&#8217;-lSD -lF /dev/null -u snmp -I -smux -p /var/run/snmp.pid 127.0.0.1&#8242;</p>
<p>删除 127.0.0.1，修改后为:</p>
<pre class="brush: bash; title: ; notranslate">
SNMPDOPTS='-lSD -lF /dev/null -u snmp -I -smux -p /var/run/snmp.pid'
</pre>
<p>保存。</p>
<pre class="brush: bash; title: ; notranslate"># invoke-rc.d snmpd start</pre>
<p>在其它主机上进行测试(其需要安装snmp包)</p>
<pre class="brush: bash; title: ; notranslate">#snmpwalk -v 3 -u username -l authNoPriv -a MD5 -A authpassword 192.168.6.8 system</pre>
<p>转自：http://www.unixaid.info/index.php/unixtecspt/27-netadmin/784-debiansnmpd.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huanxiangwu.com/674/debian%e7%ae%80%e5%8d%95%e9%85%8d%e7%bd%aesnmpd%e6%9c%8d%e5%8a%a1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian快速自动化安装LAMP环境和PHPMyAdmin</title>
		<link>http://www.huanxiangwu.com/654/debian%e5%bf%ab%e9%80%9f%e8%87%aa%e5%8a%a8%e5%8c%96%e5%ae%89%e8%a3%85lamp%e7%8e%af%e5%a2%83</link>
		<comments>http://www.huanxiangwu.com/654/debian%e5%bf%ab%e9%80%9f%e8%87%aa%e5%8a%a8%e5%8c%96%e5%ae%89%e8%a3%85lamp%e7%8e%af%e5%a2%83#comments</comments>
		<pubDate>Thu, 17 Mar 2011 07:53:02 +0000</pubDate>
		<dc:creator>huanxiangwu</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[PHPMyAdmin]]></category>

		<guid isPermaLink="false">http://www.huanxiangwu.com/?p=654</guid>
		<description><![CDATA[当使用apt-get安装MySQL的过程中，会弹出一个对话框提示用户输入MySQL的root账号的新密码 输入密码后选择OK，之后还会弹出一个让你再输入一遍，确定选择OK就真OK了 下面是安装PHPMyAdmin 安装过程中会让你选择Web服务器，使用空格选择apache2后ok 但弹出对话框提示输入一个密码用于创建MySQL数据库，输入MySQL的root密码 然后输入一个密码用于访问PHPMyAdmin系统 再次输入密码 这样一个LAMP环境就安装完成了，在IP或域名后加/phpmyadmin就可以使用phpmyAdmin了]]></description>
			<content:encoded><![CDATA[<pre class="brush: bash; title: ; notranslate">apt-get install mysql-server php5 apache2 php5-mysql php5-gd php5-ldap
openssh-server php5-curl php5-cli php5-mcrypt</pre>
<p>当使用apt-get安装MySQL的过程中，会弹出一个对话框提示用户输入MySQL的root账号的新密码<br />
<a href="http://www.huanxiangwu.com/wp-content/uploads/2011/03/EnterMySQLRootPassword.png"><img class="alignnone size-full wp-image-655" title="EnterMySQLRootPassword" src="http://www.huanxiangwu.com/wp-content/uploads/2011/03/EnterMySQLRootPassword.png" alt="EnterMySQLRootPassword" width="787" height="204" /></a><br />
输入密码后选择OK，之后还会弹出一个让你再输入一遍，确定选择OK就真OK了</p>
<p>下面是安装PHPMyAdmin</p>
<pre class="brush: bash; title: ; notranslate">apt-get install phpmyadmin</pre>
<p>安装过程中会让你选择Web服务器，使用空格选择apache2后ok<br />
<a href="http://www.huanxiangwu.com/wp-content/uploads/2011/03/PhpMyAdminWhichWebServerDialog.png"><img class="alignnone size-full wp-image-661" title="PhpMyAdminWhichWebServerDialog" src="http://www.huanxiangwu.com/wp-content/uploads/2011/03/PhpMyAdminWhichWebServerDialog.png" alt="PhpMyAdminWhichWebServerDialog" width="547" height="203" /></a><br />
但弹出对话框提示输入一个密码用于创建MySQL数据库，输入MySQL的root密码<br />
<a href="http://www.huanxiangwu.com/wp-content/uploads/2011/03/PhpMyAdminRootPasswordDialog.png"><img class="alignnone size-full wp-image-662" title="PhpMyAdminRootPasswordDialog" src="http://www.huanxiangwu.com/wp-content/uploads/2011/03/PhpMyAdminRootPasswordDialog.png" alt="PhpMyAdminRootPasswordDialog" width="533" height="173" /></a><br />
然后输入一个密码用于访问PHPMyAdmin系统<br />
<a href="http://www.huanxiangwu.com/wp-content/uploads/2011/03/PhpMyAdminApplicationPasswordDialog.png"><img class="alignnone size-full wp-image-663" title="PhpMyAdminApplicationPasswordDialog" src="http://www.huanxiangwu.com/wp-content/uploads/2011/03/PhpMyAdminApplicationPasswordDialog.png" alt="PhpMyAdminApplicationPasswordDialog" width="540" height="174" /></a><br />
再次输入密码<br />
<a href="http://www.huanxiangwu.com/wp-content/uploads/2011/03/PhpMyAdminApplicationPasswordReconfirmDialog.png"><img class="alignnone size-full wp-image-664" title="PhpMyAdminApplicationPasswordReconfirmDialog" src="http://www.huanxiangwu.com/wp-content/uploads/2011/03/PhpMyAdminApplicationPasswordReconfirmDialog.png" alt="PhpMyAdminApplicationPasswordReconfirmDialog" width="267" height="158" /></a><br />
这样一个LAMP环境就安装完成了，在IP或域名后加/phpmyadmin就可以使用phpmyAdmin了</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huanxiangwu.com/654/debian%e5%bf%ab%e9%80%9f%e8%87%aa%e5%8a%a8%e5%8c%96%e5%ae%89%e8%a3%85lamp%e7%8e%af%e5%a2%83/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>治疗慢性咽炎的茶方</title>
		<link>http://www.huanxiangwu.com/651/%e6%b2%bb%e7%96%97%e6%85%a2%e6%80%a7%e5%92%bd%e7%82%8e%e7%9a%84%e8%8c%b6%e6%96%b9</link>
		<comments>http://www.huanxiangwu.com/651/%e6%b2%bb%e7%96%97%e6%85%a2%e6%80%a7%e5%92%bd%e7%82%8e%e7%9a%84%e8%8c%b6%e6%96%b9#comments</comments>
		<pubDate>Wed, 02 Mar 2011 05:02:41 +0000</pubDate>
		<dc:creator>huanxiangwu</dc:creator>
				<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://www.huanxiangwu.com/?p=651</guid>
		<description><![CDATA[一贴包含：

枸杞 5克
麦冬 6克
桔梗 3克
菊花 3克
玄参 6克
甘草 3克]]></description>
			<content:encoded><![CDATA[<p>一贴包含：</p>
<p>枸杞 5克<br />
麦冬 6克<br />
桔梗 3克<br />
菊花 3克<br />
玄参 6克<br />
甘草 3克</p>
<p>转自：http://www.dbafan.com/blog/?p=472</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huanxiangwu.com/651/%e6%b2%bb%e7%96%97%e6%85%a2%e6%80%a7%e5%92%bd%e7%82%8e%e7%9a%84%e8%8c%b6%e6%96%b9/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>惠普HP大中华区总裁孙振耀退休感言</title>
		<link>http://www.huanxiangwu.com/649/%e6%83%a0%e6%99%aehp%e5%a4%a7%e4%b8%ad%e5%8d%8e%e5%8c%ba%e6%80%bb%e8%a3%81%e5%ad%99%e6%8c%af%e8%80%80%e9%80%80%e4%bc%91%e6%84%9f%e8%a8%80</link>
		<comments>http://www.huanxiangwu.com/649/%e6%83%a0%e6%99%aehp%e5%a4%a7%e4%b8%ad%e5%8d%8e%e5%8c%ba%e6%80%bb%e8%a3%81%e5%ad%99%e6%8c%af%e8%80%80%e9%80%80%e4%bc%91%e6%84%9f%e8%a8%80#comments</comments>
		<pubDate>Sun, 27 Feb 2011 08:33:25 +0000</pubDate>
		<dc:creator>huanxiangwu</dc:creator>
				<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://www.huanxiangwu.com/?p=649</guid>
		<description><![CDATA[一、关于工作与生活 我有个有趣的观察，外企公司多的是25-35岁的白领，40岁以上的员工很少，二三十岁的外企员工是意气风发的，但外企公司40岁附近的经理人是很尴尬的。我见过的40岁附近的外企经理人大多在一直跳槽，最后大多跳到民企，比方说，唐骏。外企员工的成功很大程度上是公司的成功，并非个人的成功，西门子的确比国美大，但并不代表西门子中国经理比国美的老板强，甚至可以说差得很远。而进外企的人往往并不能很早理解这一点，把自己的成功90％归功于自己的能力，实际上，外企公司随便换个中国区总经理并不会给业绩带来什么了不起的影响。好了问题来了，当这些经理人40多岁了，他们的薪资要求变得很高，而他们的才能其实又不是那么出众，作为外企公司的老板，你会怎么选择？有的是只要不高薪水的，要出位的精明强干精力冲沛的年轻人，有的是，为什么还要用你？ 从上面这个例子，其实可以看到我们的工作轨迹，二三十岁的时候，生活的压力还比较小，身体还比较好，上面的父母身体还好，下面又没有孩子，不用还房贷，也没有孩子要上大学，当个外企小白领还是很光鲜的，挣得不多也够花了。但是人终归要结婚生子，终归会老，到了40岁，父母老了，要看病要吃药，要有人看护，自己要还房贷，要过基本体面的生活，要养小孩……那个时候需要挣多少钱才够花才重要。所以，看待工作，眼光要放远一点，一时的谁高谁低并不能说明什么。 从这个角度上来说，我不太赞成过于关注第一份工作的薪水，更没有必要攀比第一份工作的薪水，这在刚刚出校园的学生中间是很常见的。正常人大概要工作 35年，这好比是一场马拉松比赛，和真正的马拉松比赛不同的是，这次比赛没有职业选手，每个人都只有一次机会。要知道，有很多人甚至坚持不到终点，大多数人最后是走到终点的，只有少数人是跑过终点的，因此在刚开始的时候，去抢领先的位置并没有太大的意义。刚进社会的时候如果进500强公司，大概能拿到3k -6k/月的工资，有些特别技术的人才可能可以到8k/月，可问题是，5年以后拿多少？估计5k-10k了不起了。起点虽然高，但增幅有限，而且，后面的年轻人追赶的压力越来越大。 我前两天问我的一个销售，你会的这些东西一个新人2年就都学会了，但新人所要求的薪水却只是你的一半，到时候，你怎么办？ 职业生涯就像一场体育比赛，有初赛、复赛、决赛。初赛的时候大家都刚刚进社会，大多数都是实力一般的人，这时候努力一点认真一点很快就能让人脱颖而出，于是有的人二十多岁做了经理，有的人迟些也终于赢得了初赛，三十多岁成了经理。然后是复赛，能参加复赛的都是赢得初赛的，每个人都有些能耐，在聪明才智上都不成问题，这个时候再想要胜出就不那么容易了，单靠一点点努力和认真还不够，要有很强的坚忍精神，要懂得靠团队的力量，要懂得收服人心，要有长远的眼光…… 看上去赢得复赛并不容易，但，还不是那么难。因为这个世界的规律就是给人一点成功的同时让人骄傲自满，刚刚赢得初赛的人往往不知道自己赢得的仅仅是初赛，有了一点小小的成绩大多数人都会骄傲自满起来，认为自己已经懂得了全部，不需要再努力再学习了，他们会认为之所以不能再进一步已经不是自己的原因了。虽然他们仍然不好对付，但是他们没有耐性，没有容人的度量，更没有清晰长远的目光。就像一只愤怒的斗牛，虽然猛烈，最终是会败的，而赢得复赛的人则象斗牛士一样，不急不躁，跟随着自己的节拍，慢慢耗尽对手的耐心和体力。赢得了复赛以后，大约已经是一位很了不起的职业经理人了，当上了中小公司的总经理，大公司的副总经理，主管着每年几千万乃至几亿的生意。 最终的决赛来了，说实话我自己都还没有赢得决赛，因此对于决赛的决胜因素也只能凭自己的猜测而已，这个时候的输赢或许就像武侠小说里写得那样，大家都是高手，只能等待对方犯错了，要想轻易击败对手是不可能的，除了使上浑身解数，还需要一点运气和时间。世界的规律依然发挥着作用，赢得复赛的人已经不只是骄傲自满了，他们往往刚愎自用，听不进去别人的话，有些人的脾气变得暴躁，心情变得浮躁，身体变得糟糕，他们最大的敌人就是他们自己，在决赛中要做的只是不被自己击败，等着别人被自己击败。这和体育比赛是一样的，最后高手之间的比赛，就看谁失误少谁就赢得了决赛。 二、 根源 你工作快乐么？你的工作好么？ 有没有觉得干了一段时间以后工作很不开心？有没有觉得自己入错了行？有没有觉得自己没有得到应有的待遇？有没有觉得工作像一团乱麻每天上班都是一种痛苦？有没有很想换个工作？有没有觉得其实现在的公司并没有当初想象得那么好？有没有觉得这份工作是当初因为生存压力而找的，实在不适合自己？你从工作中得到你想要得到的了么？你每天开心么？ 网络上愤怒的人很多，你有没有想过，你为什么不快乐？你为什么愤怒？ 其实，你不快乐的根源，是因为你不知道要什么！你不知道要什么，所以你不知道去追求什么，你不知道追求什么，所以你什么也得不到。 我总觉得，职业生涯首先要关注的是自己，自己想要什么？大多数人大概没想过这个问题，唯一的想法只是——我想要一份工作，我想要一份不错的薪水，我知道所有人对于薪水的渴望，可是，你想每隔几年重来一次找工作的过程么？你想每年都在这种对于工作和薪水的焦急不安中度过么？不想的话，就好好想清楚。饮鸩止渴，不能因为口渴就拼命喝毒药。越是焦急，越是觉得自己需要一份工作，越饥不择食，越想不清楚，越容易失败，你的经历越来越差，下一份工作的人看着你的简历就皱眉头。于是你越喝越渴，越渴越喝，陷入恶性循环。最终只能哀叹世事不公或者生不逢时，只能到网络上来发泄一把，在失败者的共鸣当中寻求一点心理平衡罢了。大多数人都有生存压力，我也是，有生存压力就会有很多焦虑，积极的人会从焦虑中得到动力，而消极的人则会因为焦虑而迷失方向。所有人都必须在压力下做出选择，这就是世道，你喜欢也罢不喜欢也罢。 一般我们处理的事情分为重要的事情和紧急的事情，如果不做重要的事情就会常常去做紧急的事情。比如锻炼身体保持健康是重要的事情，而看病则是紧急的事情。如果不锻炼身体保持健康，就会常常为了病痛烦恼。又比如防火是重要的事情，而救火是紧急的事情，如果不注意防火，就要常常救火。找工作也是如此，想好自己究竟要什么是重要的事情，找工作是紧急的事情，如果不想好，就会常常要找工作。往往紧急的事情给人的压力比较大，迫使人们去赶紧做，相对来说重要的事情反而没有那么大的压力，大多数人做事情都是以压力为导向的，压力之下，总觉得非要先做紧急的事情，结果就是永远到处救火，永远没有停歇的时候。（很多人的工作也像是救火队一样忙碌痛苦，也是因为工作中没有做好重要的事情。）那些说自己活在水深火热为了生存顾不上那么多的朋友，今天找工作困难是当初你们没有做重要的事情，是结果不是原因。如果今天你们还是因为急于要找一份工作而不去思考，那么或许将来要继续承受痛苦找工作的结果。 我始终觉得我要说的话题，沉重了点，需要很多思考，远比唐笑打武警的话题来的枯燥乏味，但是，天下没有轻松的成功，成功，要付代价。请先忘记一切的生存压力，想想这辈子你最想要的是什么？所以，最要紧的事情，先想好自己想要什么。 三、什么是好工作 当初微软有个唐骏，很多大学里的年轻人觉得这才是他们向往的职业生涯，我在清华bbs里发的帖子被这些学子们所不屑，那个时候学生们只想出国或者去外企，不过如今看来，我还是对的，唐骏去了盛大，陈天桥创立的盛大，一家民营公司。一个高学历的海归在500强的公司里拿高薪水，这大约是很多年轻人的梦想，问题是，每年毕业的大学生都在做这个梦，好的职位却只有500个。 人都是要面子的，也是喜欢攀比的，即使在工作上也喜欢攀比，不管那是不是自己想要的。大家认为外企公司很好，可是好在哪里呢？好吧，他们在比较好的写字楼，这是你想要的么？他们出差住比较好的酒店，这是你想要的么？别人会羡慕一份外企公司的工作，这是你想要的么？那一切都是给别人看的，你干吗要活得那么辛苦给别人看？另一方面，他们薪水福利一般，并没有特别了不起，他们的晋升机会比较少，很难做到很高阶的主管，他们虽然厌恶常常加班，却不敢不加班，因为“你不干有得是人干”，大部分情况下会找个台湾人香港人新加坡人来管你，而这些人又往往有些莫名其妙的优越感。你想清楚了么？500强一定好么？找工作究竟是考虑你想要什么，还是考虑别人想看什么？ 我的大学同学们大多数都到美国了，甚至毕业这么多年了，还有人最近到国外去了。出国真的有那么好么？我的大学同学们，大多数还是在博士、博士后、访问学者地挣扎着，至今只有一个正经在一个美国大学里拿到个正式的教职。国内的教授很难当么？我有几个表亲也去了国外了，他们的父母独自在国内，没有人照顾，有好几次人在家里昏倒都没人知道，出国，真的这么光彩么？就像有人说的“很多事情就像看A片，看的人觉得很爽，做的人未必。” 人总想找到那个最好的，可是，什么是最好的？你觉得是最好的那个，是因为你的确了解，还是因为别人说他是最好的？即使他对于别人是最好的，对于你也一定是最好的么？ 对于自己想要什么，自己要最清楚，别人的意见并不是那么重要。很多人总是常常被别人的意见所影响，亲戚的意见，朋友的意见，同事的意见……问题是，你究竟是要过谁的一生？人的一生不是父母一生的续集，也不是儿女一生的前传，更不是朋友一生的外篇，只有你自己对自己的一生负责，别人无法也负不起这个责任。自己做的决定，至少到最后，自己没什么可后悔。对于大多数正常智力的人来说，所做的决定没有大的对错，无论怎么样的选择，都是可以尝试的。比如你没有考自己上的那个学校，没有入现在这个行业，这辈子就过不下去了？就会很失败？不见得。 我想，好工作，应该是适合你的工作，具体点说，应该是能给你带来你想要的东西的工作，你或许应该以此来衡量你的工作究竟好不好，而不是拿公司的大小，规模，外企还是国企，是不是有名，是不是上市公司来衡量。小公司，未必不是好公司，赚钱多的工作，也未必是好工作。你还是要先弄清楚你想要什么，如果你不清楚你想要什么，你就永远也不会找到好工作，因为你永远只看到你得不到的东西，你得到的，都是你不想要的。 可能，最好的，已经在你的身边，只是，你还没有学会珍惜。人们总是盯着得不到的东西，而忽视了那些已经得到的东西。 四、普通人 我发现中国人的励志和国外的励志存在非常大的不同，中国的励志比较鼓励人立下大志愿，卧薪尝胆，有朝一日成富成贵。而国外的励志比较鼓励人勇敢面对现实生活，面对普通人的困境，虽然结果也是成富成贵，但起点不一样，相对来说，我觉得后者在操作上更现实，而前者则需要用999个失败者来堆砌一个成功者的故事。 我们都是普通人，普通人的意思就是，概率这件事是很准的。因此，我们不会买彩票中500万，我们不会成为比尔盖茨或者李嘉诚，我们不会坐飞机掉下来，我们当中很少的人会创业成功，我们之中有30％的人会离婚，我们之中大部分人会活过65岁…… 所以请你在想自己要什么的时候，要得“现实”一点，你说我想要做李嘉诚，抱歉，我帮不上你。成为比尔盖茨或者李嘉诚这种人，是靠命的，看我写的这篇文章绝对不会让你成为他们，即使你成为了他们，也绝对不是我这篇文章的功劳。“王侯将相宁有种乎”但真正当皇帝的只有一个人，王侯将相，人也不多。目标定得高些对于喜欢挑战的人来说有好处，但对于大多数普通人来说，反而比较容易灰心沮丧，很容易就放弃了。 回过头来说，李嘉诚比你有钱大致50万倍，他比你更快乐么？或许。有没有比你快乐50万倍，一定没有。他比你最多也就快乐一两倍，甚至有可能还不如你快乐。寻找自己想要的东西不是和别人比赛，比谁要得更多更高，比谁的目标更远大。虽然成为李嘉诚这个目标很宏大，但你并不见得会从这个目标以及追求目标的过程当中获得快乐，而且基本上你也做不到。你必须听听你内心的声音，寻找真正能够使你获得快乐的东西，那才是你想要的东西。 你想要的东西，或者我们把它称之为目标，目标其实并没有高低之分，你不需要因为自己的目标没有别人远大而不好意思，达到自己的目标其实就是成功，成功有大有小，快乐却是一样的。我们追逐成功，其实追逐的是成功带来的快乐，而非成功本身。职业生涯的道路上，我们常常会被攀比的心态蒙住眼睛，忘记了追求的究竟是什么，忘记了是什么能使我们更快乐。 社会上一夜暴富的新闻很多，这些消息，总会在我们的心里面掀起很多涟漪，涟漪多了就变成惊涛骇浪，心里的惊涛骇浪除了打翻承载你目标的小船，并不会使得你也一夜暴富。“只见贼吃肉，不见贼挨揍。”我们这些普通人既没有当贼的勇气，又缺乏当贼的狠辣绝决，虽然羡慕吃肉，却更害怕挨揍，偶尔看到几个没挨揍的贼就按奈不住，或者心思活动，或者大感不公，真要叫去做贼，却也不敢。 我还是过普通人的日子，要普通人的快乐，至少，晚上睡得着觉。 五、跳槽与积累 首先要说明，工作是一件需要理智的事情，所以不要在工作上耍个性，天涯上或许会有人觉得你很有个性而叫好，煤气公司电话公司不会因为觉得你很有个性而免了你的帐单。当你很帅地炒掉了你的老板，当你很酷地挖苦了一番招聘的HR，账单还是要照付，只是你赚钱的时间更少了，除了你自己，没人受损失。 我并不反对跳槽，但跳槽决不是解决问题的办法，而且频繁跳槽的后果是让人觉得没有忠诚度可言，而且不能安心工作。现在很多人从网上找工作，很多找工作的网站常常给人出些馊主意，要知道他们是盈利性企业，当然要从自身盈利的角度来考虑，大家越是频繁跳槽频繁找工作他们越是生意兴隆，所以鼓动人们跳槽是他们的工作。所以他们会常常告诉你，你拿的薪水少了，你享受的福利待遇差了，又是“薪情快报”又是“赞叹自由奔放的灵魂”。至于是否会因此让你不能安心，你跳了槽是否解决问题，是否更加开心，那个，他们管不着。 要跳槽肯定是有问题，一般来说问题发生了，躲是躲不开的，很多人跳槽是因为这样或者那样的不开心，如果这种不开心，在现在这个公司不能解决，那么在下一个公司多半也解决不掉。你必须相信，90%的情况下，你所在的公司并没有那么烂，你认为不错的公司也没有那么好。就像围城里说的，“城里的人拼命想冲出来，而城外的人拼命想冲进去。”每个公司都有每个公司的问题，没有问题的公司是不存在的。换个环境你都不知道会碰到什么问题，与其如此，不如就在当下把问题解决掉。很多问题当你真的想要去解决的时候，或许并没有那么难。有的时候你觉得问题无法解决，事实上，那只是“你觉得”。 人生的曲线应该是曲折向上的，偶尔会遇到低谷但大趋势总归是曲折向上的，而不是象脉冲波一样每每回到起点，我见过不少面试者，30多岁了，四五份工作经历，每次多则3年，少则1年，30多岁的时候回到起点从一个初级职位开始干起，拿基本初级的薪水，和20多岁的年轻人一起竞争，不觉得有点辛苦么？这种日子好过么？ 我非常不赞成在一个行业超过3年以后换行业，基本上，35岁以前我们的生存资本靠打拼，35岁以生存的资本靠的就是积累，这种积累包括人际关系，经验，人脉，口碑……如果常常更换行业，代表几年的积累付之东流，一切从头开始，如果换了两次行业，35岁的时候大概只有5年以下的积累，而一个没有换过行业的人至少有了10年的积累，谁会占优势？工作到2-3年的时候，很多人觉得工作不顺利，好像到了一个瓶颈，心情烦闷，就想辞职，乃至换一个行业，觉得这样所有一切烦恼都可以抛开，会好很多。其实这样做只是让你从头开始，到了时候还是会发生和原来行业一样的困难，熬过去就向上跨了一大步，要知道每个人都会经历这个过程，每个人的职业生涯中都会碰到几个瓶颈，你熬过去了而别人没有熬过去你就领先了。跑长跑的人会知道，开始的时候很轻松，但是很快会有第一次的难受，但过了这一段又能跑很长一段，接下来会碰到第二次的难受，坚持过了以后又能跑一段，如此往复，难受一次比一次厉害，直到坚持不下去了。大多数人第一次就坚持不了了，一些人能坚持到第二次，第三次虽然大家都坚持不住了，可是跑到这里的人也没几个了，这点资本足够你安稳活这一辈子了。 一份工作到两三年的时候，大部分人都会变成熟手，这个时候往往会陷入不断的重复，有很多人会觉得厌倦，有些人会觉得自己已经搞懂了一切，从而懒得去寻求进步了。很多时候的跳槽是因为觉得失去兴趣了，觉得自己已经完成比赛了。其实这个时候比赛才刚刚开始，工作两三年的人，无论是客户关系，人脉，手下，和领导的关系，在业内的名气……还都是远远不够的，但稍有成绩的人总是会自我感觉良好的，每个人都觉得自己跟客户关系铁得要命，觉得自己在业界的口碑好得很。其实可以肯定地说，一定不是，这个时候，还是要拿出前两年的干劲来，稳扎稳打，积累才刚刚开始。 你足够了解你的客户吗？你知道他最大的烦恼是什么吗？你足够了解你的老板么？你知道他最大的烦恼是什么吗？你足够了解你的手下么？你知道他最大的烦恼是什么吗？如果你不知道，你凭什么觉得自己已经积累够了？如果你都不了解，你怎么能让他们帮你的忙，做你想让他们做的事情？如果他们不做你想让他们做的事情，你又何来的成功？ 六、等待 这是个浮躁的人们最不喜欢的话题，本来不想说这个话题，因为会引起太多的争论，而我又无意和人争论这些，但是考虑到对于职业生涯的长久规划，这是一个躲避不了的话题，还是决定写一写，不爱看的请离开吧。 并不是每次穿红灯都会被汽车撞，并不是每个罪犯都会被抓到，并不是每个错误都会被惩罚，并不是每个贪官都会被枪毙，并不是你的每一份努力都会得到回报，并不是你的每一次坚持都会有人看到，并不是你每一点付出都能得到公正的回报，并不是你的每一个善意都能被理解……这个，就是世道。好吧，世道不够好，可是，你有推翻世道的勇气么？如果没有，你有更好的解决办法么？有很多时候，人需要一点耐心，一点信心。每个人总会轮到几次不公平的事情，而通常，安心等待是最好的办法。 有很多时候我们需要等待，需要耐得住寂寞，等待属于你的那一刻。周润发等待过，刘德华等待过，周星驰等待过，王菲等待过，张艺谋也等待过……看到了他们如今的功成名就的人，你可曾看到当初他们的等待和耐心？你可曾看到金马奖影帝在街边摆地摊？你可曾看到德云社一群人在剧场里给一位观众说相声？你可曾看到周星驰的角色甚至连一句台词都没有？每一个成功者都有一段低沉苦闷的日子，我几乎能想象得出来他们借酒浇愁的样子，我也能想象得出他们为了生存而挣扎的窘迫。在他们一生最中灿烂美好的日子里，他们渴望成功，但却两手空空，一如现在的你。没有人保证他们将来一定会成功，而他们的选择是耐住寂寞。如果当时的他们总念叨着“成功只是属于特权阶级的”，你觉得他们今天会怎样？ 曾经我也不明白有些人为什么并不比我有能力却要坐在我的头上，年纪比我大就一定要当我的领导么？为什么有些烂人不需要努力就能赚钱？为什么刚刚改革开放的时候的人能那么容易赚钱，而轮到我们的时候，什么事情都要正规化了？有一天我突然想，我还在上学的时候他们就在社会里挣扎奋斗了，他们在社会上奋斗积累了十几二十年，我们新人来了，他们有的我都想要，我这不是在要公平，我这是在要抢劫。因为我要得太急，因为我忍不住寂寞。二十多岁的男人，没有钱，没有事业，却有蓬勃的欲望。 人总是会遇到挫折的，人总是会有低潮的，人总是会有不被人理解的时候的，人总是有要低声下气的时候，这些时候恰恰是人生最关键的时候，因为大家都会碰到挫折，而大多数人过不了这个门槛，你能过，你就成功了。在这样的时刻，我们需要耐心等待，满怀信心地去等待，相信，生活不会放弃你，机会总会来的。至少，你还年轻，你没有坐牢，没有生治不了的病，没有欠还不起的债。比你不幸的人远远多过比你幸运的人，你还怕什么？路要一步步走，虽然到达终点的那一步很激动人心，但大部分的脚步是平凡甚至枯燥的，但没有这些脚步，或者耐不住这些平凡枯燥，你终归是无法迎来最后的那些激动人心。 逆境，是上帝帮你淘汰竞争者的地方。要知道，你不好受，别人也不好受，你坚持不下去了，别人也一样，千万不要告诉别人你坚持不住了，那只能让别人获得坚持的信心，让竞争者看着你微笑的面孔，失去信心，退出比赛。胜利属于那些有耐心的人。 在最绝望的时候，我会去看电影《The Pursuit of Happyness》《JerryMaguire》，让自己重新鼓起勇气，因为，无论什么时候，我们总还是有希望。当所有的人离开的时候，我不失去希望，我不放弃。每天下班坐在车里，我喜欢哼着《隐形的翅膀》看着窗外，我知道，我在静静等待，等待属于我的那一刻。 原贴里伊吉网友的话我很喜欢，抄录在这里： [...]]]></description>
			<content:encoded><![CDATA[<p><strong>一、关于工作与生活 </strong></p>
<p>我有个有趣的观察，外企公司多的是25-35岁的白领，40岁以上的员工很少，二三十岁的外企员工是意气风发的，但外企公司40岁附近的经理人是很尴尬的。我见过的40岁附近的外企经理人大多在一直跳槽，最后大多跳到民企，比方说，唐骏。外企员工的成功很大程度上是公司的成功，并非个人的成功，西门子的确比国美大，但并不代表西门子中国经理比国美的老板强，甚至可以说差得很远。而进外企的人往往并不能很早理解这一点，把自己的成功90％归功于自己的能力，实际上，外企公司随便换个中国区总经理并不会给业绩带来什么了不起的影响。好了问题来了，当这些经理人40多岁了，他们的薪资要求变得很高，而他们的才能其实又不是那么出众，作为外企公司的老板，你会怎么选择？有的是只要不高薪水的，要出位的精明强干精力冲沛的年轻人，有的是，为什么还要用你？</p>
<p>从上面这个例子，其实可以看到我们的工作轨迹，二三十岁的时候，生活的压力还比较小，身体还比较好，上面的父母身体还好，下面又没有孩子，不用还房贷，也没有孩子要上大学，当个外企小白领还是很光鲜的，挣得不多也够花了。但是人终归要结婚生子，终归会老，到了40岁，父母老了，要看病要吃药，要有人看护，自己要还房贷，要过基本体面的生活，要养小孩……那个时候需要挣多少钱才够花才重要。所以，看待工作，眼光要放远一点，一时的谁高谁低并不能说明什么。</p>
<p>从这个角度上来说，我不太赞成过于关注第一份工作的薪水，更没有必要攀比第一份工作的薪水，这在刚刚出校园的学生中间是很常见的。正常人大概要工作 35年，这好比是一场马拉松比赛，和真正的马拉松比赛不同的是，这次比赛没有职业选手，每个人都只有一次机会。要知道，有很多人甚至坚持不到终点，大多数人最后是走到终点的，只有少数人是跑过终点的，因此在刚开始的时候，去抢领先的位置并没有太大的意义。刚进社会的时候如果进500强公司，大概能拿到3k -6k/月的工资，有些特别技术的人才可能可以到8k/月，可问题是，5年以后拿多少？估计5k-10k了不起了。起点虽然高，但增幅有限，而且，后面的年轻人追赶的压力越来越大。</p>
<p>我前两天问我的一个销售，你会的这些东西一个新人2年就都学会了，但新人所要求的薪水却只是你的一半，到时候，你怎么办？<br />
职业生涯就像一场体育比赛，有初赛、复赛、决赛。初赛的时候大家都刚刚进社会，大多数都是实力一般的人，这时候努力一点认真一点很快就能让人脱颖而出，于是有的人二十多岁做了经理，有的人迟些也终于赢得了初赛，三十多岁成了经理。然后是复赛，能参加复赛的都是赢得初赛的，每个人都有些能耐，在聪明才智上都不成问题，这个时候再想要胜出就不那么容易了，单靠一点点努力和认真还不够，要有很强的坚忍精神，要懂得靠团队的力量，要懂得收服人心，要有长远的眼光……</p>
<p>看上去赢得复赛并不容易，但，还不是那么难。因为这个世界的规律就是给人一点成功的同时让人骄傲自满，刚刚赢得初赛的人往往不知道自己赢得的仅仅是初赛，有了一点小小的成绩大多数人都会骄傲自满起来，认为自己已经懂得了全部，不需要再努力再学习了，他们会认为之所以不能再进一步已经不是自己的原因了。虽然他们仍然不好对付，但是他们没有耐性，没有容人的度量，更没有清晰长远的目光。就像一只愤怒的斗牛，虽然猛烈，最终是会败的，而赢得复赛的人则象斗牛士一样，不急不躁，跟随着自己的节拍，慢慢耗尽对手的耐心和体力。赢得了复赛以后，大约已经是一位很了不起的职业经理人了，当上了中小公司的总经理，大公司的副总经理，主管着每年几千万乃至几亿的生意。</p>
<p>最终的决赛来了，说实话我自己都还没有赢得决赛，因此对于决赛的决胜因素也只能凭自己的猜测而已，这个时候的输赢或许就像武侠小说里写得那样，大家都是高手，只能等待对方犯错了，要想轻易击败对手是不可能的，除了使上浑身解数，还需要一点运气和时间。世界的规律依然发挥着作用，赢得复赛的人已经不只是骄傲自满了，他们往往刚愎自用，听不进去别人的话，有些人的脾气变得暴躁，心情变得浮躁，身体变得糟糕，他们最大的敌人就是他们自己，在决赛中要做的只是不被自己击败，等着别人被自己击败。这和体育比赛是一样的，最后高手之间的比赛，就看谁失误少谁就赢得了决赛。</p>
<p><strong>二、 根源</strong></p>
<p>你工作快乐么？你的工作好么？</p>
<p>有没有觉得干了一段时间以后工作很不开心？有没有觉得自己入错了行？有没有觉得自己没有得到应有的待遇？有没有觉得工作像一团乱麻每天上班都是一种痛苦？有没有很想换个工作？有没有觉得其实现在的公司并没有当初想象得那么好？有没有觉得这份工作是当初因为生存压力而找的，实在不适合自己？你从工作中得到你想要得到的了么？你每天开心么？</p>
<p>网络上愤怒的人很多，你有没有想过，你为什么不快乐？你为什么愤怒？</p>
<p>其实，你不快乐的根源，是因为你不知道要什么！你不知道要什么，所以你不知道去追求什么，你不知道追求什么，所以你什么也得不到。</p>
<p>我总觉得，职业生涯首先要关注的是自己，自己想要什么？大多数人大概没想过这个问题，唯一的想法只是——我想要一份工作，我想要一份不错的薪水，我知道所有人对于薪水的渴望，可是，你想每隔几年重来一次找工作的过程么？你想每年都在这种对于工作和薪水的焦急不安中度过么？不想的话，就好好想清楚。饮鸩止渴，不能因为口渴就拼命喝毒药。越是焦急，越是觉得自己需要一份工作，越饥不择食，越想不清楚，越容易失败，你的经历越来越差，下一份工作的人看着你的简历就皱眉头。于是你越喝越渴，越渴越喝，陷入恶性循环。最终只能哀叹世事不公或者生不逢时，只能到网络上来发泄一把，在失败者的共鸣当中寻求一点心理平衡罢了。大多数人都有生存压力，我也是，有生存压力就会有很多焦虑，积极的人会从焦虑中得到动力，而消极的人则会因为焦虑而迷失方向。所有人都必须在压力下做出选择，这就是世道，你喜欢也罢不喜欢也罢。</p>
<p>一般我们处理的事情分为重要的事情和紧急的事情，如果不做重要的事情就会常常去做紧急的事情。比如锻炼身体保持健康是重要的事情，而看病则是紧急的事情。如果不锻炼身体保持健康，就会常常为了病痛烦恼。又比如防火是重要的事情，而救火是紧急的事情，如果不注意防火，就要常常救火。找工作也是如此，想好自己究竟要什么是重要的事情，找工作是紧急的事情，如果不想好，就会常常要找工作。往往紧急的事情给人的压力比较大，迫使人们去赶紧做，相对来说重要的事情反而没有那么大的压力，大多数人做事情都是以压力为导向的，压力之下，总觉得非要先做紧急的事情，结果就是永远到处救火，永远没有停歇的时候。（很多人的工作也像是救火队一样忙碌痛苦，也是因为工作中没有做好重要的事情。）那些说自己活在水深火热为了生存顾不上那么多的朋友，今天找工作困难是当初你们没有做重要的事情，是结果不是原因。如果今天你们还是因为急于要找一份工作而不去思考，那么或许将来要继续承受痛苦找工作的结果。</p>
<p>我始终觉得我要说的话题，沉重了点，需要很多思考，远比唐笑打武警的话题来的枯燥乏味，但是，天下没有轻松的成功，成功，要付代价。请先忘记一切的生存压力，想想这辈子你最想要的是什么？所以，最要紧的事情，先想好自己想要什么。</p>
<p><strong>三、什么是好工作</strong></p>
<p>当初微软有个唐骏，很多大学里的年轻人觉得这才是他们向往的职业生涯，我在清华bbs里发的帖子被这些学子们所不屑，那个时候学生们只想出国或者去外企，不过如今看来，我还是对的，唐骏去了盛大，陈天桥创立的盛大，一家民营公司。一个高学历的海归在500强的公司里拿高薪水，这大约是很多年轻人的梦想，问题是，每年毕业的大学生都在做这个梦，好的职位却只有500个。</p>
<p>人都是要面子的，也是喜欢攀比的，即使在工作上也喜欢攀比，不管那是不是自己想要的。大家认为外企公司很好，可是好在哪里呢？好吧，他们在比较好的写字楼，这是你想要的么？他们出差住比较好的酒店，这是你想要的么？别人会羡慕一份外企公司的工作，这是你想要的么？那一切都是给别人看的，你干吗要活得那么辛苦给别人看？另一方面，他们薪水福利一般，并没有特别了不起，他们的晋升机会比较少，很难做到很高阶的主管，他们虽然厌恶常常加班，却不敢不加班，因为“你不干有得是人干”，大部分情况下会找个台湾人香港人新加坡人来管你，而这些人又往往有些莫名其妙的优越感。你想清楚了么？500强一定好么？找工作究竟是考虑你想要什么，还是考虑别人想看什么？</p>
<p>我的大学同学们大多数都到美国了，甚至毕业这么多年了，还有人最近到国外去了。出国真的有那么好么？我的大学同学们，大多数还是在博士、博士后、访问学者地挣扎着，至今只有一个正经在一个美国大学里拿到个正式的教职。国内的教授很难当么？我有几个表亲也去了国外了，他们的父母独自在国内，没有人照顾，有好几次人在家里昏倒都没人知道，出国，真的这么光彩么？就像有人说的“很多事情就像看A片，看的人觉得很爽，做的人未必。”</p>
<p>人总想找到那个最好的，可是，什么是最好的？你觉得是最好的那个，是因为你的确了解，还是因为别人说他是最好的？即使他对于别人是最好的，对于你也一定是最好的么？</p>
<p>对于自己想要什么，自己要最清楚，别人的意见并不是那么重要。很多人总是常常被别人的意见所影响，亲戚的意见，朋友的意见，同事的意见……问题是，你究竟是要过谁的一生？人的一生不是父母一生的续集，也不是儿女一生的前传，更不是朋友一生的外篇，只有你自己对自己的一生负责，别人无法也负不起这个责任。自己做的决定，至少到最后，自己没什么可后悔。对于大多数正常智力的人来说，所做的决定没有大的对错，无论怎么样的选择，都是可以尝试的。比如你没有考自己上的那个学校，没有入现在这个行业，这辈子就过不下去了？就会很失败？不见得。</p>
<p>我想，好工作，应该是适合你的工作，具体点说，应该是能给你带来你想要的东西的工作，你或许应该以此来衡量你的工作究竟好不好，而不是拿公司的大小，规模，外企还是国企，是不是有名，是不是上市公司来衡量。小公司，未必不是好公司，赚钱多的工作，也未必是好工作。你还是要先弄清楚你想要什么，如果你不清楚你想要什么，你就永远也不会找到好工作，因为你永远只看到你得不到的东西，你得到的，都是你不想要的。<br />
可能，最好的，已经在你的身边，只是，你还没有学会珍惜。人们总是盯着得不到的东西，而忽视了那些已经得到的东西。</p>
<p><strong>四、普通人</strong></p>
<p>我发现中国人的励志和国外的励志存在非常大的不同，中国的励志比较鼓励人立下大志愿，卧薪尝胆，有朝一日成富成贵。而国外的励志比较鼓励人勇敢面对现实生活，面对普通人的困境，虽然结果也是成富成贵，但起点不一样，相对来说，我觉得后者在操作上更现实，而前者则需要用999个失败者来堆砌一个成功者的故事。</p>
<p>我们都是普通人，普通人的意思就是，概率这件事是很准的。因此，我们不会买彩票中500万，我们不会成为比尔盖茨或者李嘉诚，我们不会坐飞机掉下来，我们当中很少的人会创业成功，我们之中有30％的人会离婚，我们之中大部分人会活过65岁……</p>
<p>所以请你在想自己要什么的时候，要得“现实”一点，你说我想要做李嘉诚，抱歉，我帮不上你。成为比尔盖茨或者李嘉诚这种人，是靠命的，看我写的这篇文章绝对不会让你成为他们，即使你成为了他们，也绝对不是我这篇文章的功劳。“王侯将相宁有种乎”但真正当皇帝的只有一个人，王侯将相，人也不多。目标定得高些对于喜欢挑战的人来说有好处，但对于大多数普通人来说，反而比较容易灰心沮丧，很容易就放弃了。</p>
<p>回过头来说，李嘉诚比你有钱大致50万倍，他比你更快乐么？或许。有没有比你快乐50万倍，一定没有。他比你最多也就快乐一两倍，甚至有可能还不如你快乐。寻找自己想要的东西不是和别人比赛，比谁要得更多更高，比谁的目标更远大。虽然成为李嘉诚这个目标很宏大，但你并不见得会从这个目标以及追求目标的过程当中获得快乐，而且基本上你也做不到。你必须听听你内心的声音，寻找真正能够使你获得快乐的东西，那才是你想要的东西。<br />
你想要的东西，或者我们把它称之为目标，目标其实并没有高低之分，你不需要因为自己的目标没有别人远大而不好意思，达到自己的目标其实就是成功，成功有大有小，快乐却是一样的。我们追逐成功，其实追逐的是成功带来的快乐，而非成功本身。职业生涯的道路上，我们常常会被攀比的心态蒙住眼睛，忘记了追求的究竟是什么，忘记了是什么能使我们更快乐。</p>
<p>社会上一夜暴富的新闻很多，这些消息，总会在我们的心里面掀起很多涟漪，涟漪多了就变成惊涛骇浪，心里的惊涛骇浪除了打翻承载你目标的小船，并不会使得你也一夜暴富。“只见贼吃肉，不见贼挨揍。”我们这些普通人既没有当贼的勇气，又缺乏当贼的狠辣绝决，虽然羡慕吃肉，却更害怕挨揍，偶尔看到几个没挨揍的贼就按奈不住，或者心思活动，或者大感不公，真要叫去做贼，却也不敢。</p>
<p>我还是过普通人的日子，要普通人的快乐，至少，晚上睡得着觉。</p>
<p><strong>五、跳槽与积累</strong></p>
<p>首先要说明，工作是一件需要理智的事情，所以不要在工作上耍个性，天涯上或许会有人觉得你很有个性而叫好，煤气公司电话公司不会因为觉得你很有个性而免了你的帐单。当你很帅地炒掉了你的老板，当你很酷地挖苦了一番招聘的HR，账单还是要照付，只是你赚钱的时间更少了，除了你自己，没人受损失。</p>
<p>我并不反对跳槽，但跳槽决不是解决问题的办法，而且频繁跳槽的后果是让人觉得没有忠诚度可言，而且不能安心工作。现在很多人从网上找工作，很多找工作的网站常常给人出些馊主意，要知道他们是盈利性企业，当然要从自身盈利的角度来考虑，大家越是频繁跳槽频繁找工作他们越是生意兴隆，所以鼓动人们跳槽是他们的工作。所以他们会常常告诉你，你拿的薪水少了，你享受的福利待遇差了，又是“薪情快报”又是“赞叹自由奔放的灵魂”。至于是否会因此让你不能安心，你跳了槽是否解决问题，是否更加开心，那个，他们管不着。</p>
<p>要跳槽肯定是有问题，一般来说问题发生了，躲是躲不开的，很多人跳槽是因为这样或者那样的不开心，如果这种不开心，在现在这个公司不能解决，那么在下一个公司多半也解决不掉。你必须相信，90%的情况下，你所在的公司并没有那么烂，你认为不错的公司也没有那么好。就像围城里说的，“城里的人拼命想冲出来，而城外的人拼命想冲进去。”每个公司都有每个公司的问题，没有问题的公司是不存在的。换个环境你都不知道会碰到什么问题，与其如此，不如就在当下把问题解决掉。很多问题当你真的想要去解决的时候，或许并没有那么难。有的时候你觉得问题无法解决，事实上，那只是“你觉得”。</p>
<p>人生的曲线应该是曲折向上的，偶尔会遇到低谷但大趋势总归是曲折向上的，而不是象脉冲波一样每每回到起点，我见过不少面试者，30多岁了，四五份工作经历，每次多则3年，少则1年，30多岁的时候回到起点从一个初级职位开始干起，拿基本初级的薪水，和20多岁的年轻人一起竞争，不觉得有点辛苦么？这种日子好过么？</p>
<p>我非常不赞成在一个行业超过3年以后换行业，基本上，35岁以前我们的生存资本靠打拼，35岁以生存的资本靠的就是积累，这种积累包括人际关系，经验，人脉，口碑……如果常常更换行业，代表几年的积累付之东流，一切从头开始，如果换了两次行业，35岁的时候大概只有5年以下的积累，而一个没有换过行业的人至少有了10年的积累，谁会占优势？工作到2-3年的时候，很多人觉得工作不顺利，好像到了一个瓶颈，心情烦闷，就想辞职，乃至换一个行业，觉得这样所有一切烦恼都可以抛开，会好很多。其实这样做只是让你从头开始，到了时候还是会发生和原来行业一样的困难，熬过去就向上跨了一大步，要知道每个人都会经历这个过程，每个人的职业生涯中都会碰到几个瓶颈，你熬过去了而别人没有熬过去你就领先了。跑长跑的人会知道，开始的时候很轻松，但是很快会有第一次的难受，但过了这一段又能跑很长一段，接下来会碰到第二次的难受，坚持过了以后又能跑一段，如此往复，难受一次比一次厉害，直到坚持不下去了。大多数人第一次就坚持不了了，一些人能坚持到第二次，第三次虽然大家都坚持不住了，可是跑到这里的人也没几个了，这点资本足够你安稳活这一辈子了。</p>
<p>一份工作到两三年的时候，大部分人都会变成熟手，这个时候往往会陷入不断的重复，有很多人会觉得厌倦，有些人会觉得自己已经搞懂了一切，从而懒得去寻求进步了。很多时候的跳槽是因为觉得失去兴趣了，觉得自己已经完成比赛了。其实这个时候比赛才刚刚开始，工作两三年的人，无论是客户关系，人脉，手下，和领导的关系，在业内的名气……还都是远远不够的，但稍有成绩的人总是会自我感觉良好的，每个人都觉得自己跟客户关系铁得要命，觉得自己在业界的口碑好得很。其实可以肯定地说，一定不是，这个时候，还是要拿出前两年的干劲来，稳扎稳打，积累才刚刚开始。<br />
你足够了解你的客户吗？你知道他最大的烦恼是什么吗？你足够了解你的老板么？你知道他最大的烦恼是什么吗？你足够了解你的手下么？你知道他最大的烦恼是什么吗？如果你不知道，你凭什么觉得自己已经积累够了？如果你都不了解，你怎么能让他们帮你的忙，做你想让他们做的事情？如果他们不做你想让他们做的事情，你又何来的成功？</p>
<p><strong>六、等待</strong></p>
<p>这是个浮躁的人们最不喜欢的话题，本来不想说这个话题，因为会引起太多的争论，而我又无意和人争论这些，但是考虑到对于职业生涯的长久规划，这是一个躲避不了的话题，还是决定写一写，不爱看的请离开吧。</p>
<p>并不是每次穿红灯都会被汽车撞，并不是每个罪犯都会被抓到，并不是每个错误都会被惩罚，并不是每个贪官都会被枪毙，并不是你的每一份努力都会得到回报，并不是你的每一次坚持都会有人看到，并不是你每一点付出都能得到公正的回报，并不是你的每一个善意都能被理解……这个，就是世道。好吧，世道不够好，可是，你有推翻世道的勇气么？如果没有，你有更好的解决办法么？有很多时候，人需要一点耐心，一点信心。每个人总会轮到几次不公平的事情，而通常，安心等待是最好的办法。</p>
<p>有很多时候我们需要等待，需要耐得住寂寞，等待属于你的那一刻。周润发等待过，刘德华等待过，周星驰等待过，王菲等待过，张艺谋也等待过……看到了他们如今的功成名就的人，你可曾看到当初他们的等待和耐心？你可曾看到金马奖影帝在街边摆地摊？你可曾看到德云社一群人在剧场里给一位观众说相声？你可曾看到周星驰的角色甚至连一句台词都没有？每一个成功者都有一段低沉苦闷的日子，我几乎能想象得出来他们借酒浇愁的样子，我也能想象得出他们为了生存而挣扎的窘迫。在他们一生最中灿烂美好的日子里，他们渴望成功，但却两手空空，一如现在的你。没有人保证他们将来一定会成功，而他们的选择是耐住寂寞。如果当时的他们总念叨着“成功只是属于特权阶级的”，你觉得他们今天会怎样？</p>
<p>曾经我也不明白有些人为什么并不比我有能力却要坐在我的头上，年纪比我大就一定要当我的领导么？为什么有些烂人不需要努力就能赚钱？为什么刚刚改革开放的时候的人能那么容易赚钱，而轮到我们的时候，什么事情都要正规化了？有一天我突然想，我还在上学的时候他们就在社会里挣扎奋斗了，他们在社会上奋斗积累了十几二十年，我们新人来了，他们有的我都想要，我这不是在要公平，我这是在要抢劫。因为我要得太急，因为我忍不住寂寞。二十多岁的男人，没有钱，没有事业，却有蓬勃的欲望。</p>
<p>人总是会遇到挫折的，人总是会有低潮的，人总是会有不被人理解的时候的，人总是有要低声下气的时候，这些时候恰恰是人生最关键的时候，因为大家都会碰到挫折，而大多数人过不了这个门槛，你能过，你就成功了。在这样的时刻，我们需要耐心等待，满怀信心地去等待，相信，生活不会放弃你，机会总会来的。至少，你还年轻，你没有坐牢，没有生治不了的病，没有欠还不起的债。比你不幸的人远远多过比你幸运的人，你还怕什么？路要一步步走，虽然到达终点的那一步很激动人心，但大部分的脚步是平凡甚至枯燥的，但没有这些脚步，或者耐不住这些平凡枯燥，你终归是无法迎来最后的那些激动人心。</p>
<p>逆境，是上帝帮你淘汰竞争者的地方。要知道，你不好受，别人也不好受，你坚持不下去了，别人也一样，千万不要告诉别人你坚持不住了，那只能让别人获得坚持的信心，让竞争者看着你微笑的面孔，失去信心，退出比赛。胜利属于那些有耐心的人。</p>
<p>在最绝望的时候，我会去看电影《The Pursuit of Happyness》《JerryMaguire》，让自己重新鼓起勇气，因为，无论什么时候，我们总还是有希望。当所有的人离开的时候，我不失去希望，我不放弃。每天下班坐在车里，我喜欢哼着《隐形的翅膀》看着窗外，我知道，我在静静等待，等待属于我的那一刻。</p>
<p>原贴里伊吉网友的话我很喜欢，抄录在这里：</p>
<p>每个人都希望，自己是独一无二的特殊者<br />
含着金匙出生、投胎到好家庭、工作安排到电力局拿1w月薪这样的小概率事件，当然最好轮到自己<br />
红军长征两万五、打成右派反革命、胼手胝足牺牲尊严去奋斗，最好留给祖辈父辈和别人<br />
自然，不是每个吃过苦的人都会得到回报<br />
但是，任何时代，每一个既得利益者身后，都有他的祖辈父辈奋斗挣扎乃至流血付出生命的身影<br />
羡慕别人有个好爸爸，没什么不可以<br />
问题是，你的下一代，会有一个好爸爸吗？<br />
至于问到为什么不能有同样的赢面概率？我只能问：为什么物种竞争中，人和猴子不能有同样的赢面概率？<br />
物竞天择。猴子的灵魂不一定比你卑微，但你身后有几十万年的类人猿进化积淀。</p>
<p><strong>七、入对行跟对人</strong></p>
<p>在中国，大概很少有人是一份职业做到底的，虽然如此，第一份工作还是有些需要注意的地方，有两件事情格外重要，第一件是入行，第二件事情是跟人。第一份工作对人最大的影响就是入行，现代的职业分工已经很细，我们基本上只能在一个行业里成为专家，不可能在多个行业里成为专家。很多案例也证明即使一个人在一个行业非常成功，到另外一个行业，往往完全不是那么回事情，“你想改变世界，还是想卖一辈子汽水？”是乔布斯邀请百事可乐总裁约翰·斯考利加盟苹果时所说的话，结果这位在百事非常成功的约翰，到了苹果表现平平。其实没有哪个行业特别好，也没有哪个行业特别差，或许有报道说哪个行业的平均薪资比较高，但是他们没说的是，那个行业的平均压力也比较大。看上去很美的行业一旦进入才发现很多地方其实并不那么完美，只是外人看不见。</p>
<p>说实话，我自己都没有发大财，所以我的建议只是让人快乐工作的建议，不是如何发大财的建议，我们只讨论一般普通打工者的情况。我认为选择什么行业并没有太大关系，看问题不能只看眼前。比如，从前年开始，国家开始整顿医疗行业，很多医药公司开不下去，很多医药行业的销售开始转行。其实医药行业的不景气是针对所有公司的，并非针对一家公司，大家的日子都不好过，这个时候跑掉是非常不划算的，大多数正规的医药公司即使不做新生意撑个两三年总是能撑的，大多数医药销售靠工资撑个两三年也是可以撑的，国家不可能永远捏着医药行业不放的，两三年以后光景总归还会好起来的，那个时候别人都跑了而你没跑，那时的日子应该会好过很多。有的时候觉得自己这个行业不行了，问题是，再不行的行业，做得人少了也变成了好行业，当大家都觉得不好的时候，往往却是最好的时候。大家都觉得金融行业好，金融行业门槛高不说，有多少人削尖脑袋要钻进去，竞争激励，进去以后还要时时提防，一个疏忽，就被后来的人给挤掉了，压力巨大，又如何谈得上快乐？也就未必是“好”工作了。</p>
<p>太阳能这个东西至今还不能进入实际应用的阶段，但是中国已经有7家和太阳能有关的公司在纽交所上市了，国美苏宁永乐其实是贸易型企业，也能上市，鲁泰纺织连续10年利润增长超过50%，卖茶的一茶一座，卖衣服的海澜之家都能上市……其实选什么行业真的不重要，关键是怎么做。事情都是人做出来的，关键是人。</p>
<p>有一点是需要记住的，这个世界上，有史以来直到我们能够预见得到的未来，成功的人总是少数，有钱的人总是少数，大多数人是一般的，普通的，不太成功的。因此，大多数人的做法和看法，往往都不是距离成功最近的做法和看法。因此大多数人说好的东西不见得好，大多数人说不好的东西不见得不好。大多数人都去炒股的时候说明跌只是时间问题，大家越是热情高涨的时候，跌的日子越近。大多数人买房子的时候，房价不会涨，而房价涨的差不多的时候，大多数人才开始买房子。不会有这样一件事情让大家都变成功，发了财，历史上不曾有过，将来也不会发生。有些东西即使一时运气好得到了，还是会在别的时候别的地方失去的。</p>
<p>年轻人在职业生涯的刚开始，尤其要注意的是，要做对的事情，不要让自己今后几十年的人生总是提心吊胆，更不值得为了一份工作赔上自己的青春年华。我的公司是个不行贿的公司，以前很多人不理解，甚至自己的员工也不理解，不过如今，我们是同行中最大的企业，客户乐意和我们打交道，尤其是在国家打击腐败的时候，每个人都知道我们做生意不给钱的名声，都敢于和我们做生意。而勇于给钱的公司，不是倒了，就是跑了，要不就是每天睡不好觉，人还是要看长远一点。很多时候，看起来最近的路，其实是最远的路，看起来最远的路，其实是最近的路。</p>
<p>跟对人是说，入行后要跟个好领导好老师，刚进社会的人做事情往往没有经验，需要有人言传身教。对于一个人的发展来说，一个好领导是非常重要的。所谓“好”的标准，不是他让你少干活多拿钱，而是以下三个。</p>
<p>首先，好领导要有宽广的心胸，如果一个领导每天都会发脾气，那几乎可以肯定他不是个心胸宽广的人，能发脾气的时候却不发脾气的领导，多半是非常厉害的领导。中国人当领导最大的毛病是容忍不了能力比自己强的人，所以常常可以看到的一个现象是，领导很有能力，手下一群庸才或者手下一群闲人。如果看到这样的环境，还是不要去的好。</p>
<p>其次，领导要愿意从下属的角度来思考问题，这一点其实是从面试的时候就能发现的，如果这位领导总是从自己的角度来考虑问题，几乎不听你说什么，这就危险了。从下属的角度来考虑问题并不代表同意下属的说法，但他必须了解下属的立场，下属为什么要这么想，然后他才有办法说服你，只关心自己怎么想的领导往往难以获得下属的信服。</p>
<p>第三，领导敢于承担责任，如果出了问题就把责任往下推，有了功劳就往自己身上揽，这样的领导不跟也罢。选择领导，要选择关键时刻能抗得住的领导，能够为下属的错误买单的领导，因为这是他作为领导的责任。</p>
<p>有可能，你碰不到好领导，因为，中国的领导往往是屁股决定脑袋的领导，因为他坐领导的位置，所以他的话就比较有道理，这是传统观念官本位的误区，可能有大量的这种无知无能的领导，只是，这对于你其实是好事，如果将来有一天你要超过他，你希望他比较聪明还是比较笨？相对来说这样的领导其实不难搞定，只是你要把自己的身段放下来而已。多认识一些人，多和比自己强的人打交道，同样能找到好的老师，不要和一群同样郁闷的人一起控诉社会，控诉老板，这帮不上你，只会让你更消极。和那些比你强的人打交道，看他们是怎么想的，怎么做的，学习他们，然后跟更强的人打交道。</p>
<p><strong>八、选择</strong></p>
<p>我们每天做的最多的事情，其实是选择，因此在谈职业生涯的时候不得不提到这个话题。</p>
<p>我始终认为，在很大的范围内，我们究竟会成为一个什么样的人，决定权在我们自己，每天我们都在做各种各样的选择，我可以不去写这篇文章，去别人的帖子拍拍砖头，也可以写下这些文字，帮助别人的同时也整理自己的思路，我可以多注意下格式让别人易于阅读，也可以写成一堆，我可以就这样发上来，也可以在发以前再看几遍，你可以选择不刮胡子就去面试，也可以选择出门前照照镜子……每天，每一刻我们都在做这样那样的决定，我们可以漫不经心，也可以多花些心思，成千上万的小选择累计起来，就决定了最终我们是个什么样的人。</p>
<p>从某种意义上来说我们的未来不是别人给的，是我们自己选择的，很多人会说我命苦啊，没得选择阿，如果你认为“去微软还是去IBM”“上清华还是上北大”“当销售副总还是当厂长”这种才叫选择的话，的确你没有什么选择，大多数人都没有什么选择。但每天你都可以选择是否为客户服务更周到一些，是否对同事更耐心一些，是否把工作做得更细致一些，是否把情况了解得更清楚一些，是否把不清楚的问题再弄清楚一些……你也可以选择在是否在痛苦中继续坚持，是否抛弃掉自己的那些负面的想法，是否原谅一个人的错误，是否相信我在这里写下的这些话，是否不要再犯同样的错误……生活每天都在给你选择的机会，每天都在给你改变自己人生的机会，你可以选择赖在地上撒泼打滚，也可以选择咬牙站起来。你永远都有选择。有些选择不是立杆见影的，需要累积，比如农民可以选择自己常常去浇地，也可以选择让老天去浇地，诚然你今天浇水下去苗不见得今天马上就长出来，但常常浇水，大部分苗终究会长出来的，如果你不浇，收成一定很糟糕。</p>
<p>每天生活都在给你机会，他不会给你一叠现金也不会拱手送你个好工作，但实际上，他还是在给你机会。我的家庭是一个普通的家庭，没有任何了不起的社会关系，我的父亲在大学毕业以后就被分配到了边疆，那个小县城只有一条马路，他们那一代人其实比我们更有理由抱怨，他们什么也没得到，年轻的时候文化大革命，书都没得读，支援边疆插队落户，等到老了，却要给年轻人机会了。他有足够的理由象成千上万那样的青年一样坐在那里抱怨生不逢时，怨气冲天。然而在分配到边疆的十年之后，国家恢复招研究生，他考回了原来的学校。研究生毕业，他被分配到了安徽一家小单位里，又是3年以后，国家第一届招收博士生，他又考回了原来的学校，成为中国第一代博士，那时的他比现在的我年纪还大。生活并没有放弃他，他也没有放弃生活。10年的等待，他做了他自己的选择，他没有放弃，他没有破罐子破摔，所以时机到来的时候，他改变了自己的人生。你最终会成为什么样的人，就决定在你的每个小小的选择之间。</p>
<p>你选择相信什么？你选择和谁交朋友？你选择做什么？你选择怎么做？……我们面临太多的选择，而这些选择当中，意识形态层面的选择又远比客观条件的选择来得重要得多，比如选择做什么产品其实并不那么重要，而选择怎么做才重要。选择用什么人并不重要，而选择怎么带这些人才重要。大多数时候选择客观条件并不要紧，大多数关于客观条件的选择并没有对错之分，要紧的是选择怎么做。一个大学生毕业了，他要去微软也好，他要卖猪肉也好，他要创业也好，他要做游戏代练也好，只要不犯法，不害人，都没有什么关系，要紧的是，选择了以后，怎么把事情做好。</p>
<p>除了这些，你还可以选择时间和环境，比如，你可以选择把这辈子最大的困难放在最有体力最有精力的时候，也可以走一步看一步，等到了40岁再说，只是到了40多岁，那正是一辈子最脆弱的时候，上有老下有小，如果在那个时候碰上了职业危机，实在是一件很苦恼的事情。与其如此不如在20多岁30多岁的时候吃点苦，好让自己脆弱的时候活得从容一些。你可以选择在温室里成长，也可以选择到野外磨砺，你可以选择在办公室吹冷气的工作，也可以选择40度的酷热下，去见你的客户，只是，这一切最终会累积起来，引导你到你应得的未来。</p>
<p>我不敢说所有的事情你都有得选择，但是绝大部分事情你有选择，只是往往你不把这当作一种选择。认真对待每一次选择，才会有比较好的未来。</p>
<p><strong>九、选择职业</strong></p>
<p>职业的选择，总的来说，无非就是销售、市场、客服、物流、行政、人事、财务、技术、管理几个大类，有个有趣的现象就是，500强的CEO当中最多的是销售出身，第二多的人是财务出身，这两者加起来大概超过95％。现代IT行业也有技术出身成为老板的，但实际上，后来他们还是从事了很多销售和市场的工作，并且表现出色，公司才获得了成功，完全靠技术能力成为公司老板的，几乎没有。这是有原因的，因为销售就是一门跟人打交道的学问，而管理其实也是跟人打交道的学问，这两者之中有很多相通的东西，他们的共同目标就是“让别人去做某件特定的事情。”而财务则是从数字的层面了解生意的本质，从宏观上看待生意的本质，对于一个生意是否挣钱，是否可以正常运作有着最深刻的认识。</p>
<p>公司小的时候是销售主导公司，而公司大的时候是财务主导公司，销售的局限性在于只看人情不看数字，财务的局限性在于只看数字不看人情。公司初期，运营成本低，有订单就活得下去，跟客户也没有什么谈判的条件，别人肯给生意做已经谢天谢地了，这个时候订单压倒一切，客户的要求压倒一切，所以当然要顾人情。公司大了以后，一切都要规范化，免得因为不规范引起一些不必要的风险，同时运营成本也变高，必须提高利润率，把有限的资金放到最有产出的地方。对于上市公司来说，股东才不管你客户是不是最近出国，最近是不是那个省又在搞严打，到了时候就要把业绩拿出来，拿不出来就抛股票，这个时候就是数字压倒一切。</p>
<p>前两天听到有人说一句话觉得很有道理，开始的时候我们想“能做什么？”，等到公司做大了有规模了，我们想“不能做什么。”很多人在工作中觉得为什么领导这么保守，这也不行那也不行，错过很多机会。很多时候是因为，你还年轻，你想的是“能做什么”，而作为公司领导要考虑的方面很多，他比较关心“不能做什么”。</p>
<p>我并非鼓吹大家都去做销售或者财务，究竟选择什么样的职业，和你究竟要选择什么样的人生有关系，有些人就喜欢下班按时回家，看看书听听音乐，那也挺好，但就不适合找个销售的工作了，否则会是折磨自己。有些人就喜欢出风头，喜欢成为一群人的中心，如果选择做财务工作，大概也干不久，因为一般老板不喜欢财务太积极，也不喜欢财务话太多。先想好自己要过怎样的人生，再决定要找什么样的职业。有很多的不快乐，其实是源自不满足，而不满足，很多时候是源自于心不定，而心不定则是因为不清楚究竟自己要什么，不清楚要什么的结果就是什么都想要，结果什么都没得到。<br />
我想，我们还是因为生活而工作，不是因为工作而生活，生活是最要紧的，工作只是生活中的一部分。我总是觉得生活的各方方面都是相互影响的，如果生活本身一团乱麻，工作也不会顺利。所以要有娱乐、要有社交、要锻炼身体，要有和睦的家庭……最要紧的，要开心，我的两个销售找我聊天，一肚子苦水，我问他们， 2年以前，你什么都没有，工资不高，没有客户关系，没有业绩，处于被开的边缘，现在的你比那时条件好了很多，为什么现在却更加不开心了？如果你做得越好越不开心，那你为什么还要工作？首先的首先，人还是要让自己高兴起来，让自己心态好起来，这种发自内心的改变会让你更有耐心，更有信心，更有气质，更能包容……否则，看看镜子里的你，你满意么？</p>
<p>有人会说，你说得容易，我每天加班，不加班老板就会把我炒掉，每天累得要死，哪有时间娱乐、社交、锻炼？那是人们把目标设定太高的缘故，如果你还在动不动就会被老板炒掉的边缘，那么你当然不能设立太高的目标，难道你还想每天去打高尔夫？你没时间去健身房锻炼身体，但是上下班的时候多走几步可以吧，有楼梯的时候走走楼梯不走电梯可以吧？办公的间隙扭扭脖子拉拉肩膀做做俯卧撑可以吧？谁规定锻炼就一定要拿出每天2个小时去健身房？你没时间社交，每月参加郊游一次可以吧，周末去参加个什么音乐班，绘画班之类的可以吧，去尝试认识一些同行，和他们找机会交流交流可以吧？开始的时候总是有些难的，但迈出这一步就会向良性循环的方向发展。而每天工作得很苦闷，剩下的时间用来咀嚼苦闷，只会陷入恶性循环，让生活更加糟糕。</p>
<p>虽然离开惠普仅有十五天，但感觉上惠普已经离我很远。我的心思更多放在规划自己第二阶段的人生，这并非代表我对惠普没有任何眷恋，主要还是想以此驱动自己往前走。</p>
<p>万科王石登珠穆朗玛峰的体验给我很多启发，虽然在出发时携带大量的物资，但是登顶的过程中，必须不断减轻负荷，最终只有一个氧气瓶和他登上峰顶。登山如此，漫长的人生又何尝不是。<br />
我宣布退休后，接到同事朋友同学的祝贺。大部分人都认为我能够在这样的职位上及年龄选择退休，是一种勇气，也是一种福气。<br />
还有一部分人怀疑我只是借此机会换个工作，当然还有一些人说我在HP做不下去了，趁此机会离开。<br />
我多年来已经习惯别人对我的说三道四，但对于好友，我还是挺关心大家是否真正理解我的想法，这也是写这篇文章的目的。<br />
由于受我父亲早逝的影响，我很早就下定决心，要在有生之年实现自己的愿望，我不要像我父亲一样，为家庭生活忙碌一辈子，临终前感伤，懊恼自己有很多没有实现的理想。<br />
一本杂志的文章提到我们在生前就应该思考自己的墓志铭，因为那代表你自己对完美人生的定义，我们应该尽可能在有生之年去实现它。<br />
我希望我的墓志铭上除了与家人及好友有关的内容外，是这样写着：<br />
1.这个人曾经服务于一家全球最大的IT公司（HP）25年，和她一起经历过数次重大的变革，看着她从以电子仪表为主要的业务变革成全球最大的IT公司。<br />
2.这个人曾经在全球发展最快的国家（中国）工作16年，并担任HP中国区总裁7年，见证及经历过中国改革开放的关键最新突破阶段，与中国一起成长。<br />
3.这个人热爱飞行，曾经是一个有执照的飞行员，累积飞行时数超过X小时，曾经在X个机场起降过。<br />
4.这个人曾经获得管理硕士学位，在领导管理上特别关注中国企业的组织行为及绩效，并且在这个领域上获得中国企业界的认可。<br />
我费时25年才总结1和2两项成果，我不知还要费时多久才能达成3和4的愿望，特别是第4个愿望需要经历学术的训练，才能将我的经验总结成知识。<br />
否则我的经验将无法有效影响及传授他人。因此重新进入学校学习，拿一个管理学位是有必要的，更何况这是我一个非常重要的愿望。<br />
另一方面，我25年的时间都花在运营(operation)的领域，兢兢业业的做好职业人士的工作，它是一份好工作，特别是在HP，这份工作也帮助我建立财务的基础，支持家庭的发展。<br />
但是我不想终其一生，都陷入在运营的领域，我想象企业家一样，有机会靠一些点子(ideas)赚钱，虽然风险很高，但是值得一试，即使失败，也不枉走一回，这也是第4个愿望其中的一部份。<br />
Carly Fiorina曾经对我说过“这个世界上有好想法的人很多，但有能力去实现的人很少”，2007年5月21日在北大演讲时，有人问起那些书对我影响较大，我想对我人生观有影响的其中一本书叫“TriggerPoint”，它的主要观点是：人生最需要的不是规划，而是在适当的时机掌握机会，采取行动。<br />
我这些愿望在我心中已经酝酿一段很长的时间，开始的时候，也许一年想个一两次，过了也就忘掉，但逐渐的，这个心中的声音，愈来愈大，出现的频率也愈来愈高，当它几乎每一个星期都会来与我对话时，我知道时机已经成熟。<br />
但和任何人一样，要丢掉自己现在所拥有的，所熟悉的环境及稳定的收入，转到一条自己未曾经历过，存在未知风险的道路，需要绝大的勇气，家人的支持和好友的鼓励。有舍才有得，真是知易行难，我很高兴自己终于跨出了第一步。<br />
我要感谢HP的EER提前退休优惠政策，它是其中一个关键的TriggerPoints,另一个关键因素是在去年五六月发生的事。<br />
当时我家老大从大学毕业，老二从高中毕业，在他们继续工作及求学前，这是一个黄金时段，让我们全家可以相聚一段较长的时间，我为此很早就计划休一个长假，带着他们到各地游玩。<br />
但这个计划因为工作上一件重要的事情（Mark Hurd访华）不得不取消。这个事件刺激了我必须严肃的去对待那心中的声音，我会不会继续不断的错失很多关键的机会?<br />
我已经年过50，我会不会走向和我父亲一样的道路？人事部老总Charles跟我说，很多人在所有对他有利的星星都排成一列时，还是错失时机。<br />
我知道原因，因为割舍及改变对人是多么的困难，我相信大部分的人都有自己人生的理想，但我也相信很多人最终只是把这些理想当成是幻想，然后不断的为自己寻找不能实现的藉口，南非前总统曼德拉曾经说过，“与改变世界相比，改变自己更困难”，真是一针见血。<br />
什么是快乐及有意义的人生？我相信每一个人的定义都不一样，对我来说，能实现我墓志铭上的内容就是我的定义。<br />
在中国惠普总裁的位置上固然可以吸引很多的关注及眼球，但是我太太及较亲近的好友，都知道那不是我追求的，那只是为扮演好这个角色必须尽力做好的地方。<br />
做一个没有名片的人士，虽然只有十多天的时间，但我发现我的脑袋里已经空出很多空间及能量，让我可以静心的为我ChapterII的新生活做细致的调研及规划。<br />
我预订以两年的时间来完成转轨的准备工作，并且花多点时间与家人共处。这两年的时间我希望拿到飞行执照，拿到管理有关的硕士学位，提升英文的水平，建立新的网络，多认识不同行业的人，保持与大陆的联系。希望两年后，我可以顺利回到大陆去实现我第四个愿望。<br />
毫不意外，在生活上，我发现很多需要调整的地方。<br />
二十多年来，我生活的步调及节奏，几乎完全被公司及工作所左右，不断涌出的deadline及任务驱动我每天的安排，一旦离开这样的环境，第一个需要调整的就是要依靠自己的自律及意志力来驱动每天的活动，睡觉睡到自然醒的态度绝对不正确，放松自己，不给事情设定目标及时间表，或者对错失时间目标无所谓，也不正确，没有年度，季度，月及周计划也不正确。<br />
担任高层经理多年，已经养成交待事情的习惯，自己的时间主要花在思考，决策及追踪项目的进展情况，更多是依靠一个庞大的团队来执行具体的事项及秘书来处理很多协调及繁琐的事情。<br />
到美国后，很多事情需要打800号电话联系，但这些电话很忙，常让你在waitingline上等待很长的时间，当我在等待时，我可以体会以前秘书工作辛苦的地方，但同时也提醒我自己，在这个阶段要改变态度，培养更大的耐性及自己动手做的能力。<br />
生活的内容也要做出很大的调整，多出时间锻炼身体，多出时间关注家人，多出时间关注朋友，多出时间体验不同的休闲活动及飞行，一步步的，希望生活逐步调整到我所期望的轨道上，期待这两年的生活既充实又充满乐趣及意义。<br />
第一个快乐的体验就是准备及参加大儿子的订婚礼，那种全心投入，不需担忧工作数字的感觉真好。同时我也租好了公寓，买好了家具及车子，陪家人在周末的时候到Reno及Lake Tahoe玩了一趟，LakeTahoe我去了多次，但这次的体验有所不同，我从心里欣赏到它的美丽。<br />
但同时我也在加紧调研的工作，为申请大学及飞行学校做准备，这段时间也和在硅谷的朋友及一些风险投资公司见面，了解不同的产业。<br />
我的人生观是“完美的演出来自充分的准备”，“勇于改变自己，适应不断变化的环境，机会将不断出现”，“快乐及有意义的人生来自于实现自己心中的愿望，而非外在的掌声”。<br />
我离开时，有两位好朋友送给我两个不同的祝语，Baron的是“多年功过化烟尘”，杨华的是“莫春者，风乎舞雩，咏而归”，它们分别代表了我离开惠普及走向未来的心情。<br />
我总结人生有三个阶段，一个阶段是为现实找一份工作，一个阶段是为现实，但可以选择一份自己愿意投入的工作，一个阶段是为理想去做一些事情。<br />
我珍惜我的福气，感激HP及同事、好朋友给我的支持，鼓励及协助，这篇文字化我心声的文章与好友分享。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huanxiangwu.com/649/%e6%83%a0%e6%99%aehp%e5%a4%a7%e4%b8%ad%e5%8d%8e%e5%8c%ba%e6%80%bb%e8%a3%81%e5%ad%99%e6%8c%af%e8%80%80%e9%80%80%e4%bc%91%e6%84%9f%e8%a8%80/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>通过ulimit改善系统性能</title>
		<link>http://www.huanxiangwu.com/631/improve-system-performance-by-ulimit</link>
		<comments>http://www.huanxiangwu.com/631/improve-system-performance-by-ulimit#comments</comments>
		<pubDate>Fri, 25 Feb 2011 08:25:32 +0000</pubDate>
		<dc:creator>huanxiangwu</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[linux性能优化]]></category>
		<category><![CDATA[ulimit]]></category>

		<guid isPermaLink="false">http://www.huanxiangwu.com/?p=631</guid>
		<description><![CDATA[概述 系统性能一直是一个受关注的话题，如何通过最简单的设置来实现最有效的性能调优，如何在有限资源的条件下保证程序的运作，ulimit 是我们在处理这些问题时，经常使用的一种简单手段。ulimit 是一种 linux 系统的内键功能，它具有一套参数集，用于为由它生成的 shell 进程及其子进程的资源使用设置限制。本文将在后面的章节中详细说明 ulimit 的功能，使用以及它的影响，并以具体的例子来详细地阐述它在限制资源使用方面的影响。 ulimit 的功能和用法 ulimit 功能简述 假设有这样一种情况，当一台 Linux 主机上同时登陆了 10 个人，在系统资源无限制的情况下，这 10 个用户同时打开了 500 个文档，而假设每个文档的大小有 10M，这时系统的内存资源就会受到巨大的挑战。 而实际应用的环境要比这种假设复杂的多，例如在一个嵌入式开发环境中，各方面的资源都是非常紧缺的，对于开启文件描述符的数量，分配堆栈的大小，CPU 时间，虚拟内存大小，等等，都有非常严格的要求。资源的合理限制和分配，不仅仅是保证系统可用性的必要条件，也与系统上软件运行的性能有着密不可分的联系。这时，ulimit 可以起到很大的作用，它是一种简单并且有效的实现资源限制的方式。 ulimit 用于限制 shell 启动进程所占用的资源，支持以下各种类型的限制：所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时，它支持硬资源和软资源的限制。 作为临时限制，ulimit 可以作用于通过使用其命令登录的 shell 会话，在会话终止时便结束限制，并不影响于其他 shell 会话。而对于长期的固定限制，ulimit 命令语句又可以被添加到由登录 shell 读取的文件中，作用于特定的 shell 用户。 图 1. ulimit 的使用 在下面的章节中，将详细介绍如何使用 ulimit 做相应的资源限制。 如何使用 ulimit ulimit [...]]]></description>
			<content:encoded><![CDATA[<h2><strong>概述</strong></h2>
<p>系统性能一直是一个受关注的话题，如何通过最简单的设置来实现最有效的性能调优，如何在有限资源的条件下保证程序的运作，ulimit 是我们在处理这些问题时，经常使用的一种简单手段。ulimit 是一种 linux 系统的内键功能，它具有一套参数集，用于为由它生成的 shell 进程及其子进程的资源使用设置限制。本文将在后面的章节中详细说明 ulimit 的功能，使用以及它的影响，并以具体的例子来详细地阐述它在限制资源使用方面的影响。</p>
<h2>ulimit 的功能和用法</h2>
<p><strong>ulimit 功能简述</strong><br />
假设有这样一种情况，当一台 Linux 主机上同时登陆了 10 个人，在系统资源无限制的情况下，这 10 个用户同时打开了 500 个文档，而假设每个文档的大小有 10M，这时系统的内存资源就会受到巨大的挑战。</p>
<p>而实际应用的环境要比这种假设复杂的多，例如在一个嵌入式开发环境中，各方面的资源都是非常紧缺的，对于开启文件描述符的数量，分配堆栈的大小，CPU 时间，虚拟内存大小，等等，都有非常严格的要求。资源的合理限制和分配，不仅仅是保证系统可用性的必要条件，也与系统上软件运行的性能有着密不可分的联系。这时，ulimit 可以起到很大的作用，它是一种简单并且有效的实现资源限制的方式。</p>
<p>ulimit 用于限制 shell 启动进程所占用的资源，支持以下各种类型的限制：所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时，它支持硬资源和软资源的限制。</p>
<p>作为临时限制，ulimit 可以作用于通过使用其命令登录的 shell 会话，在会话终止时便结束限制，并不影响于其他 shell 会话。而对于长期的固定限制，ulimit 命令语句又可以被添加到由登录 shell 读取的文件中，作用于特定的 shell 用户。<br />
<strong>图 1. ulimit 的使用</strong></p>
<p><strong><a href="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image001.jpg"><img class="alignnone size-full wp-image-633" title="ulimit的使用" src="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image001.jpg" alt="" width="528" height="174" /></a></strong></p>
<p>在下面的章节中，将详细介绍如何使用 ulimit 做相应的资源限制。<br />
<strong>如何使用 ulimit</strong><br />
ulimit 通过一些参数选项来管理不同种类的系统资源。在本节，我们将讲解这些参数的使用。</p>
<p>ulimit 命令的格式为：ulimit [options] [limit]</p>
<p>具体的 options 含义以及简单示例可以参考以下表格。<br />
<strong>表 1. ulimit 参数说明</strong></p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><strong>选项 [options]</strong></td>
<td><strong>含义</strong></td>
<td><strong>例子</strong></td>
</tr>
<tr>
<td>-H</td>
<td>设置硬资源限制，一旦设置不能增加。</td>
<td>ulimit – Hs 64；限制硬资源，线程栈大小为 64K。</td>
</tr>
<tr>
<td>-S</td>
<td>设置软资源限制，设置后可以增加，但是不能超过硬资源设置。</td>
<td>ulimit – Sn 32；限制软资源，32 个文件描述符。</td>
</tr>
<tr>
<td>-a</td>
<td>显示当前所有的 limit 信息。</td>
<td>ulimit – a；显示当前所有的 limit 信息。</td>
</tr>
<tr>
<td>-c</td>
<td>最大的 core 文件的大小， 以 blocks 为单位。</td>
<td>ulimit – c unlimited； 对生成的 core 文件的大小不进行限制。</td>
</tr>
<tr>
<td>-d</td>
<td>进程最大的数据段的大小，以 Kbytes 为单位。</td>
<td>ulimit -d unlimited；对进程的数据段大小不进行限制。</td>
</tr>
<tr>
<td>-f</td>
<td>进程可以创建文件的最大值，以 blocks 为单位。</td>
<td>ulimit – f 2048；限制进程可以创建的最大文件大小为 2048 blocks。</td>
</tr>
<tr>
<td>-l</td>
<td>最大可加锁内存大小，以 Kbytes 为单位。</td>
<td>ulimit – l 32；限制最大可加锁内存大小为 32 Kbytes。</td>
</tr>
<tr>
<td>-m</td>
<td>最大内存大小，以 Kbytes 为单位。</td>
<td>ulimit – m unlimited；对最大内存不进行限制。</td>
</tr>
<tr>
<td>-n</td>
<td>可以打开最大文件描述符的数量。</td>
<td>ulimit – n 128；限制最大可以使用 128 个文件描述符。</td>
</tr>
<tr>
<td>-p</td>
<td>管道缓冲区的大小，以 Kbytes 为单位。</td>
<td>ulimit – p 512；限制管道缓冲区的大小为 512 Kbytes。</td>
</tr>
<tr>
<td>-s</td>
<td>线程栈大小，以 Kbytes 为单位。</td>
<td>ulimit – s 512；限制线程栈的大小为 512 Kbytes。</td>
</tr>
<tr>
<td>-t</td>
<td>最大的 CPU 占用时间，以秒为单位。</td>
<td>ulimit – t unlimited；对最大的 CPU 占用时间不进行限制。</td>
</tr>
<tr>
<td>-u</td>
<td>用户最大可用的进程数。</td>
<td>ulimit – u 64；限制用户最多可以使用 64 个进程。</td>
</tr>
<tr>
<td>-v</td>
<td>进程最大可用的虚拟内存，以 Kbytes 为单位。</td>
<td>ulimit – v 200000；限制最大可用的虚拟内存为 200000 Kbytes。</td>
</tr>
</tbody>
</table>
<p>我们可以通过以下几种方式来使用 ulimit：</p>
<ul>
<li><strong>在用户的启动脚本中</strong>如果用户使用的是 bash，就可以在用户的目录下的 .bashrc 文件中，加入 ulimit – u 64，来限制用户最多可以使用 64 个进程。此外，可以在与 .bashrc 功能相当的启动脚本中加入 ulimt。</li>
<li><strong>在应用程序的启动脚本中</strong>如果用户要对某个应用程序 myapp 进行限制，可以写一个简单的脚本 startmyapp。<br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre class="brush: bash; title: ; notranslate"> ulimit – s 512
 myapp</pre>
</td>
</tr>
</tbody>
</table>
<p>以后只要通过脚本 startmyapp 来启动应用程序，就可以限制应用程序 myapp 的线程栈大小为 512K。</li>
<li><strong>直接在控制台输入</strong><br />
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre class="brush: bash; title: ; notranslate"> user@tc511-ui:~&amp;gt;ulimit – p 256</pre>
</td>
</tr>
</tbody>
</table>
<p>限制管道的缓冲区为 256K。</li>
</ul>
<h2>用户进程的有效范围</h2>
<p>ulimit 作为对资源使用限制的一种工作，是有其作用范围的。那么，它限制的对象是单个用户，单个进程，还是整个系统呢？事实上，ulimit 限制的是当前 shell 进程以及其派生的子进程。举例来说，如果用户同时运行了两个 shell 终端进程，只在其中一个环境中执行了 ulimit – s 100，则该 shell 进程里创建文件的大小收到相应的限制，而同时另一个 shell 终端包括其上运行的子程序都不会受其影响：<br />
<strong>Shell 进程 1</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre class="brush: bash; title: ; notranslate"> ulimit – s 100
 cat testFile &amp;gt; newFile
 File size limit exceeded</pre>
</td>
</tr>
</tbody>
</table>
<p><strong>Shell 进程 2</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre class="brush: bash; title: ; notranslate"> cat testFile &amp;gt; newFile
 ls – s newFile
 323669 newFile</pre>
</td>
</tr>
</tbody>
</table>
<p>那么，是否有针对某个具体用户的资源加以限制的方法呢？答案是有的，方法是通过修改系统的 /etc/security/limits 配置文件。该文件不仅能限制指定用户的资源使用，还能限制指定组的资源使用。该文件的每一行都是对限定的一个描述，格式如下：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre class="brush: bash; title: ; notranslate"> &amp;lt;domain&amp;gt; &amp;lt;type&amp;gt; &amp;lt;item&amp;gt; &amp;lt;value&amp;gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>domain 表示用户或者组的名字，还可以使用 * 作为通配符。Type 可以有两个值，soft 和 hard。Item 则表示需要限定的资源，可以有很多候选值，如 stack，cpu，nofile 等等，分别表示最大的堆栈大小，占用的 cpu 时间，以及打开的文件数。通过添加对应的一行描述，则可以产生相应的限制。例如：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre class="brush: bash; title: ; notranslate"> * hard noflle 100</pre>
</td>
</tr>
</tbody>
</table>
<p>该行配置语句限定了任意用户所能创建的最大文件数是 100。</p>
<p>现在已经可以对进程和用户分别做资源限制了，看似已经足够了，其实不然。很多应用需要对整个系统的资源使用做一个总的限制，这时候我们需要修改 /proc 下的配置文件。/proc 目录下包含了很多系统当前状态的参数，例如 /proc/sys/kernel/pid_max，/proc/sys/net/ipv4/ip_local_port_range 等等，从文件的名字大致可以猜出所限制的资源种类。由于该目录下涉及的文件众多，在此不一一介绍。有兴趣的读者可打开其中的相关文件查阅说明。</p>
<h2>ulimit 管理系统资源的例子</h2>
<p>ulimit 提供了在 shell 进程中限制系统资源的功能。本章列举了一些使用 ulimit 对用户进程进行限制的例子，详述了这些限制行为以及对应的影响，以此来说明 ulimit 如何对系统资源进行限制，从而达到调节系统性能的功能。<br />
<strong>使用 ulimit 限制 shell 的内存使用</strong><br />
在这一小节里向读者展示如何使用 – d，– m 和 – v 选项来对 shell 所使用的内存进行限制。</p>
<p>首先我们来看一下不设置 ulimit 限制时调用 ls 命令的情况：<br />
<strong>图 2. 未设置 ulimit 时 ls 命令使用情况</strong></p>
<p><strong><a href="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image002.jpg"><img class="alignnone size-full wp-image-634" title="未设置ulimit时的ls命令使用情况" src="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image002.jpg" alt="" width="553" height="50" /></a></strong></p>
<p>大家可以看到此时的 ls 命令运行正常。下面设置 ulimit：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre class="brush: bash; title: ; notranslate"> &lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;strong&gt;ulimit -d 1000 -m 1000 -v 1000&lt;/strong&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>这里再温习一下前面章节里介绍过的这三个选项的含义：</p>
<p>-d：设置数据段的最大值。单位：KB。</p>
<p>-m：设置可以使用的常驻内存的最大值。单位：KB。</p>
<p>-v：设置虚拟内存的最大值。单位：KB。</p>
<p>通过上面的 ulimit 设置我们已经把当前 shell 所能使用的最大内存限制在 1000KB 以下。接下来我们看看这时运行 ls 命令会得到什么样的结果：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre class="brush: bash; title: ; notranslate"> haohe@sles10-hehao:~/code/ulimit&amp;gt; ls test -l
 /bin/ls: error while loading shared libraries: libc.so.6: failed to map segment
 from shared object: Cannot allocate memory</pre>
</td>
</tr>
</tbody>
</table>
<p>从上面的结果可以看到，此时 ls 运行失败。根据系统给出的错误信息我们可以看出是由于调用 libc 库时内存分配失败而导致的 ls 出错。那么我们来看一下这个 libc 库文件到底有多大：<br />
<strong>图 3. 查看 libc 文件大小<br />
<a href="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image003.jpg"><img class="alignnone size-full wp-image-635" title="查看libc文件大小" src="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image003.jpg" alt="" width="553" height="85" /></a></strong></p>
<p>从上面的信息可以看出，这个 libc 库文件的大小是 1.5MB。而我们用 ulimit 所设置的内存使用上限是 1000KB，小于 1.5MB，这也就充分证明了 ulimit 所起到的限制 shell 内存使用的功能。</p>
<p>使用 ulimit 限制 shell 创建的文件的大小</p>
<p>接下来向读者展示如何使用 -f 选项来对 shell 所能创建的文件大小进行限制。</p>
<p>首先我们来看一下，没有设置 ulimit -f 时的情况：<br />
<strong>图 4. 查看文件</strong></p>
<p><strong><a href="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image004.jpg"><img class="alignnone size-full wp-image-636" title="ls -l" src="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image004.jpg" alt="" width="553" height="54" /></a></strong></p>
<p>现有一个文件 testFile 大小为 323669 bytes，现在使用 cat 命令来创建一个 testFile 的 copy：<br />
<strong>图 5. 未设置 ulimit 时创建复本</strong></p>
<p><strong><a href="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image005.jpg"><img class="alignnone size-full wp-image-637" title="未设置ulimit时创建副本" src="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image005.jpg" alt="" width="553" height="92" /></a></strong></p>
<p>从上面的输出可以看出，我们成功的创建了 testFile 的拷贝 newFile。</p>
<p>下面我们设置 ulimt – f 100：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre class="brush: bash; title: ; notranslate"> &lt;strong&gt;&amp;gt; ulimit -f 100&lt;/strong&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>-f 选项的含义是：用来设置 shell 可以创建的文件的最大值。单位是 blocks。</p>
<p>现在我们再来执行一次相同的拷贝命令看看会是什么结果：<br />
<strong>图 6. 设置 ulimit 时创建复本</strong></p>
<p><strong><a href="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image006.jpg"><img class="alignnone size-full wp-image-638" title="设置ulimit时创建副本" src="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image006.jpg" alt="" width="553" height="34" /></a></strong></p>
<p>这次创建 testFile 的拷贝失败了，系统给出的出错信息时文件大小超出了限制。在 Linux 系统下一个 block 的默认大小是 512 bytes。所以上面的 ulimit 的含义就是限制 shell 所能创建的文件最大值为 512 x 100 = 51200 bytes，小于 323669 bytes，所以创建文件失败，符合我们的期望。这个例子说明了如何使用 ulimit 来控制 shell 所能创建的最大文件。</p>
<p>使用 ulimit 限制程序所能创建的 socket 数量</p>
<p>考虑一个现实中的实际需求。对于一个 C/S 模型中的 server 程序来说，它会为多个 client 程序请求创建多个 socket 端口给与响应。如果恰好有大量的 client 同时向 server 发出请求，那么此时 server 就会需要创建大量的 socket 连接。但在一个系统当中，往往需要限制单个 server 程序所能使用的最大 socket 数，以供其他的 server 程序所使用。那么我们如何来做到这一点呢？答案是我们可以通过 ulimit 来实现！细心的读者可能会发现，通过前面章节的介绍似乎没有限制 socket 使用的 ulimit 选项。是的，ulimit 并没有哪个选项直接说是用来限制 socket 的数量的。但是，我们有 -n 这个选项，它是用于限制一个进程所能打开的文件描述符的最大值。在 Linux 下一切资源皆文件，普通文件是文件，磁盘打印机是文件，socket 当然也是文件。在 Linux 下创建一个新的 socket 连接，实际上就是创建一个新的文件描述符。如下图所示（查看某个进程当前打开的文件描述符信息）：<br />
<strong>图 7. 查看进程打开文件描述符</strong></p>
<p><strong><a href="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image007.jpg"><img class="alignnone size-full wp-image-639" title="查看进程打开文件描述符" src="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image007.jpg" alt="" width="502" height="162" /></a></strong></p>
<p>因此，我们可以通过使用 ulimit – n 来限制程序所能打开的最大文件描述符数量，从而达到限制 socket 创建的数量。</p>
<p>使用 ulimit 限制 shell 多线程程序堆栈的大小（增加可用线程数量）</p>
<p>在最后一个例子中，向大家介绍如何使用 -s（单位 KB）来对线程的堆栈大小进行限制，从而减少整个多线程程序的内存使用，增加可用线程的数量。这个例子取自于一个真实的案例。我们所遇到的问题是系统对我们的多线程程序有如下的限制：</p>
<p>ulimit -v 200000</p>
<p>根据本文前面的介绍，这意味着我们的程序最多只能使用不到 200MB 的虚拟内存。由于我们的程序是一个多线程程序，程序在运行时会根据需要创建新的线程，这势必会增加总的内存需求量。一开始我们对堆栈大小的限制是 1024 （本例子中使用 1232 来说明）：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre class="brush: bash; title: ; notranslate"> &lt;strong&gt;# ulimit – s 1232&lt;/strong&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p>当我们的程序启动后，通过 pmap 来查看其内存使用情况，可以看到多个占用 1232KB 的数据段，这些就是程序所创建的线程所使用的堆栈：<br />
<strong>图 8. 程序线程所使用的堆栈</strong></p>
<p><strong><a href="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image008.jpg"><img class="alignnone size-full wp-image-640" title="程序线程所使用的堆栈" src="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image008.jpg" alt="" width="472" height="138" /></a></strong></p>
<p>每当一个新的线程被创建时都需要新分配一段大小为 1232KB 的内存空间，而我们总的虚拟内存限制是 200MB，所以如果我们需要创建更多的线程，那么一个可以改进的方法就是减少每个线程的固定堆栈大小，这可以通过 ulimit – s 来实现：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<pre class="brush: bash; title: ; notranslate"> # ulimit -s 512</pre>
</td>
</tr>
</tbody>
</table>
<p>我们将堆栈大小设置为 512KB，这时再通过 pmap 查看一下我们的设置是否起作用：<br />
<strong>图 9. 设置 ulimit 后堆栈大小</strong></p>
<p><strong><a href="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image009.jpg"><img class="alignnone size-full wp-image-641" title="设置ulimit后堆栈的大小" src="http://www.huanxiangwu.com/wp-content/uploads/2011/02/image009.jpg" alt="" width="475" height="118" /></a></strong></p>
<p>从上面的信息可以看出，我们已经成功的将线程的堆栈大小改为 512KB 了，这样在总内存使用限制不变的情况下，我们可以通过本小节介绍的方法来增加可以创建的线程数，从而达到改善程序的多线程性能。</p>
<h2>总结</h2>
<p>综上所述，linux 系统中的 ulimit 指令，对资源限制和系统性能优化提供了一条便捷的途径。从用户的 shell 启动脚本，应用程序启动脚本，以及直接在控制台，都可以通过该指令限制系统资源的使用，包括所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存，等等方面。本文中的示例非常直观的说明了 ulimit 的使用及其产生的效果，显而易见，ulimit 对我们在 Linux 平台的应用和开发工作是非常实用的。</p>
<p>转自：http://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huanxiangwu.com/631/improve-system-performance-by-ulimit/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FTP命令详解</title>
		<link>http://www.huanxiangwu.com/628/ftp%e5%91%bd%e4%bb%a4%e8%af%a6%e8%a7%a3</link>
		<comments>http://www.huanxiangwu.com/628/ftp%e5%91%bd%e4%bb%a4%e8%af%a6%e8%a7%a3#comments</comments>
		<pubDate>Thu, 17 Feb 2011 03:47:53 +0000</pubDate>
		<dc:creator>huanxiangwu</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[FTP]]></category>

		<guid isPermaLink="false">http://www.huanxiangwu.com/?p=628</guid>
		<description><![CDATA[FTP命令是Internet用户使用最频繁的命令之一，不论是在DOS还是UNIX操作系统下使用FTP，都会遇到大量的FTP内部命令。熟悉并灵活应用FTP的内部命令，可以大大方便使用者，并收到事半功倍之效。 FTP的命令行格式为：ftp -v -d -i -n -g [主机名]，其中 -v显示远程服务器的所有响应信息； -n限制ftp的自动登录，即不使用； .n etrc文件； -d使用调试方式； -g取消全局文件名。 ftp使用的内部命令如下(中括号表示可选项): 1.![cmd[args]]：在本地机中执行交互shell，exit回到ftp环境，如：!ls*.zip. 2.$ macro-ame[args]：执行宏定义macro-name. 3.account[password]：提供登录远程系统成功后访问系统资源所需的补充口令。 4.append local-file[remote-file]：将本地文件追加到远程系统主机，若未指定远程系统文件名，则使用本地文件名。 5.ascii：使用ascii类型传输方式。 6.bell：每个命令执行完毕后计算机响铃一次。 7.bin：使用二进制文件传输方式。 8.bye：退出ftp会话过程。 9.case：在使用mget时，将远程主机文件名中的大写转为小写字母。 10.cd remote-dir：进入远程主机目录。 11.cdup：进入远程主机目录的父目录。 12.chmod mode file-name：将远程主机文件file-name的存取方式设置为mode，如：chmod 777 a.out。 13.close：中断与远程服务器的ftp会话(与open对应)。 14.cr：使用asscii方式传输文件时，将回车换行转换为回行。 15.delete remote-file：删除远程主机文件。 16.debug[debug-value]：设置调试方式，显示发送至远程主机的每条命令，如：deb up 3，若设为0，表示取消debug。 17.dir[remote-dir][local-file]：显示远程主机目录，并将结果存入本地文件local-file。 18.disconnection：同close。 19.form format：将文件传输方式设置为format，缺省为file方式。 20.get remote-file[local-file]：将远程主机的文件remote-file传至本地硬盘的local-file。 21.glob：设置mdelete，mget，mput的文件名扩展，缺省时不扩展文件名，同命令行的-g参数。 22.hash：每传输1024字节，显示一个hash符号(#)。 23.help[cmd]：显示ftp内部命令cmd的帮助信息，如：help get。 24.idle[seconds]：将远程服务器的休眠计时器设为[seconds]秒。 25.image：设置二进制传输方式(同binary)。 26.lcd[dir]：将本地工作目录切换至dir。 27.ls[remote-dir][local-file]：显示远程目录remote-dir，并存入本地文件local-file。 [...]]]></description>
			<content:encoded><![CDATA[<p>FTP命令是Internet用户使用最频繁的命令之一，不论是在DOS还是UNIX操作系统下使用FTP，都会遇到大量的FTP内部命令。熟悉并灵活应用FTP的内部命令，可以大大方便使用者，并收到事半功倍之效。</p>
<p>FTP的命令行格式为：ftp -v -d -i -n -g [主机名]，其中</p>
<p>-v显示远程服务器的所有响应信息；</p>
<p>-n限制ftp的自动登录，即不使用；</p>
<p>.n etrc文件；</p>
<p>-d使用调试方式；</p>
<p>-g取消全局文件名。</p>
<p>ftp使用的内部命令如下(中括号表示可选项):</p>
<p>1.![cmd[args]]：在本地机中执行交互shell，exit回到ftp环境，如：!ls*.zip.</p>
<p>2.$ macro-ame[args]：执行宏定义macro-name.</p>
<p>3.account[password]：提供登录远程系统成功后访问系统资源所需的补充口令。</p>
<p>4.append local-file[remote-file]：将本地文件追加到远程系统主机，若未指定远程系统文件名，则使用本地文件名。</p>
<p>5.ascii：使用ascii类型传输方式。</p>
<p>6.bell：每个命令执行完毕后计算机响铃一次。</p>
<p>7.bin：使用二进制文件传输方式。</p>
<p>8.bye：退出ftp会话过程。</p>
<p>9.case：在使用mget时，将远程主机文件名中的大写转为小写字母。</p>
<p>10.cd remote-dir：进入远程主机目录。</p>
<p>11.cdup：进入远程主机目录的父目录。</p>
<p>12.chmod mode file-name：将远程主机文件file-name的存取方式设置为mode，如：chmod 777 a.out。</p>
<p>13.close：中断与远程服务器的ftp会话(与open对应)。</p>
<p>14.cr：使用asscii方式传输文件时，将回车换行转换为回行。</p>
<p>15.delete remote-file：删除远程主机文件。</p>
<p>16.debug[debug-value]：设置调试方式，显示发送至远程主机的每条命令，如：deb up 3，若设为0，表示取消debug。</p>
<p>17.dir[remote-dir][local-file]：显示远程主机目录，并将结果存入本地文件local-file。</p>
<p>18.disconnection：同close。</p>
<p>19.form format：将文件传输方式设置为format，缺省为file方式。</p>
<p>20.get remote-file[local-file]：将远程主机的文件remote-file传至本地硬盘的local-file。</p>
<p>21.glob：设置mdelete，mget，mput的文件名扩展，缺省时不扩展文件名，同命令行的-g参数。</p>
<p>22.hash：每传输1024字节，显示一个hash符号(#)。</p>
<p>23.help[cmd]：显示ftp内部命令cmd的帮助信息，如：help get。</p>
<p>24.idle[seconds]：将远程服务器的休眠计时器设为[seconds]秒。</p>
<p>25.image：设置二进制传输方式(同binary)。</p>
<p>26.lcd[dir]：将本地工作目录切换至dir。</p>
<p>27.ls[remote-dir][local-file]：显示远程目录remote-dir，并存入本地文件local-file。</p>
<p>28.macdef macro-name：定义一个宏，遇到macdef下的空行时，宏定义结束。</p>
<p>29.mdelete[remote-file]：删除远程主机文件。</p>
<p>30.mdir remote-files local-file：与dir类似，但可指定多个远程文件，如：mdir *.o.*.zipoutfile</p>
<p>31.mget remote-files：传输多个远程文件。</p>
<p>32.mkdir dir-name：在远程主机中建一目录。</p>
<p>33.mls remote-file local-file：同nlist，但可指定多个文件名。</p>
<p>34.mode[modename]：将文件传输方式设置为modename，缺省为stream方式。</p>
<p>35.modtime file-name：显示远程主机文件的最后修改时间。</p>
<p>36.mput local-file：将多个文件传输至远程主机。</p>
<p>37.newer file-name：如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近，则重传该文件。</p>
<p>38.nlist[remote-dir][local-file]：显示远程主机目录的文件清单，并存入本地硬盘的local-file。</p>
<p>39.nmap[inpattern outpattern]：设置文件名映射机制，使得文件传输时，文件中的某些字符相互转换，如：nmap $1.$2.$3[$1，$2].[$2，$3]，则传输文件a1.a2.a3时，文件名变为a1，a2。该命令特别适用于远程主机为非UNIX机的情况。</p>
<p>40.ntrans[inchars[outchars]]：设置文件名字符的翻译机制，如ntrans 1R，则文件名LLL将变为RRR。</p>
<p>41.open host[port]：建立指定ftp服务器连接，可指定连接端口。</p>
<p>42.passive：进入被动传输方式。</p>
<p>43.prompt：设置多个文件传输时的交互提示。</p>
<p>44.proxy ftp-cmd：在次要控制连接中，执行一条ftp命令，该命令允许连接两个ftp服务器，以在两个服务器间传输文件。第一条ftp命令必须为open，以首先建立两个服务器间的连接。</p>
<p>45.put local-file[remote-file]：将本地文件local-file传送至远程主机。</p>
<p>46.pwd：显示远程主机的当前工作目录。</p>
<p>47.quit：同bye，退出ftp会话。</p>
<p>48.quote arg1，arg2&#8230;：将参数逐字发至远程ftp服务器，如：quote syst.</p>
<p>49.recv remote-file[local-file]：同get。</p>
<p>50.reget remote-file[local-file]：类似于get，但若local-file存在，则从上次传输中断处续传。</p>
<p>51.rhelp[cmd-name]：请求获得远程主机的帮助。</p>
<p>52.rstatus[file-name]：若未指定文件名，则显示远程主机的状态，否则显示文件状态。</p>
<p>53.rename[from][to]：更改远程主机文件名。</p>
<p>54.reset：清除回答队列。</p>
<p>55.restart marker：从指定的标志marker处，重新开始get或put，如：restart 130。</p>
<p>56.rmdir dir-name：删除远程主机目录。</p>
<p>57.runique：设置文件名唯一性存储，若文件存在，则在原文件后加后缀..1，.2等。</p>
<p>58.send local-file[remote-file]：同put。</p>
<p>59.sendport：设置PORT命令的使用。</p>
<p>60.site arg1，arg2&#8230;：将参数作为SITE命令逐字发送至远程ftp主机。</p>
<p>61.size file-name：显示远程主机文件大小，如：site idle 7200。</p>
<p>62.status：显示当前ftp状态。</p>
<p>63.struct[struct-name]：将文件传输结构设置为struct-name，缺省时使用stream结构。</p>
<p>64.sunique：将远程主机文件名存储设置为唯一(与runique对应)。</p>
<p>65.system：显示远程主机的操作系统类型。</p>
<p>66.tenex：将文件传输类型设置为TENEX机的所需的类型。</p>
<p>67.tick：设置传输时的字节计数器。</p>
<p>68.trace：设置包跟踪。</p>
<p>69.type[type-name]：设置文件传输类型为type-name，缺省为ascii，如：type binary，设置二进制传输方式。</p>
<p>70.umask[newmask]：将远程服务器的缺省umask设置为newmask，如：umask 3。</p>
<p>71.user user-name[password][account]：向远程主机表明自己的身份，需要口令时，必须输入口令，如：user anonymous my@email。</p>
<p>72.verbose：同命令行的-v参数，即设置详尽报告方式，ftp服务器的所有响应都将显示给用户，缺省为on.</p>
<p>73.?[cmd]：同help。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huanxiangwu.com/628/ftp%e5%91%bd%e4%bb%a4%e8%af%a6%e8%a7%a3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

