<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>百里挑一</title> 
<link>http://www.admin99.net/index.php</link> 
<description>linux命令 &#124; seo优化技术 &#124; linux系统管理员指南 --我的学习园地</description> 
<language>zh-cn</language> 
<copyright>Powered by Bo-blog 2.0.2 sp2</copyright>
<item>
<link>http://www.admin99.net/read.php?403</link>
<title>mysql 卡死 大部分线程长时间处于sending data的状态</title> 
<author>real &lt;real@admin99.net&gt;</author>
<category>mysql</category>
<pubDate>Tue, 18 Nov 2008 14:23:45 +0000</pubDate> 
<guid>http://www.admin99.net/read.php?403</guid> 
<description>
<![CDATA[ 
	首先说明一下，这是个无头的案子，虽然问题貌似解决了，不过到现在我也没有答案，只是把这个问题拿出来晾晾<br/><br/>有台服务器，访问量挺大，每天近250w动态pv，数据库查询平均每秒近600次<br/>另一台服务器，跑的程序跟这台一样，不过只有每天约40w动态pv<br/>前段时间连续卡死过几次，当时的状态是<br/>服务器没崩溃，数据库可正常登陆。只是所有的查询都卡在“sending data”状态，长时间无法执行完，这些简单的sql语句，有时候集中在A表上，有时候集中在B表上，同时还有一些卡死在locked状态或update状态<br/><br/>看mysql的说明，sending data状态表示两种情况，一种是mysql已经查询了数据，正在发给客户端；另一种情况是，mysql已经知道某些数据需要去什么地方读取，正在从数据文件中读取<br/><br/>mysql官方说，这不是mysql的bug，但是官方也没说怎么处理......那么，看情况，就应该是配置方面的问题了。<br/>首先从sql优化的角度来查了查，那些卡死的sql语句，都是简单查询，消耗非常低，索引做的非常好，所以觉得应该不是sql语句的问题。而且慢查询日志里也没有出现慢查询。<br/><br/>把表都做了优化，就是optimize table ，过几天发现，还是会出现卡死的情况.....<br/><br/>后来考虑增加并发性能，增加了key_buffer thread_cache 等一系列的内存配置，发现没什么作用。情况依旧<br/><br/>再后来，把query_cache减小到默认值 16M，把一些不怎么变动的数据，做了静态化。惊奇的发现，12天过去了，没再出过问题......<br/><br/>后来想想，修改query_cache可能对这个问题有些帮助，毕竟数据更新比较频繁，query_cache的更新也很频繁。不过看mysql的状态，query_cache的命中率还是相当高的，差不多75％。<br/><br/>觉得问题可能出在程序上，只是没查出来。后来静态化的那些内容，是一些产品的说明文字，一般一个产品的说明也就三五十个汉字。<br/><br/>这里出问题的嫌疑比较大，一个页面有七八个产品，加起来可能三五百个汉字，虽然不多，不过查询很频繁，从这个表上查询的数据量应该是很可观的，mysql会频繁的从这个表拿数据。不过，不过有时候卡死的语句并不是在查询这个表......<br/><br/>手头没有好使的工具，郁闷。反正问题貌似好了，先放下备案吧，等以后水平高些，再来查。<br/>Tags - <a href="http://www.admin99.net/tag.php?tag=mysql" rel="tag">mysql</a> , <a href="http://www.admin99.net/tag.php?tag=%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96" rel="tag">性能优化</a>
  ]]> 
</description>
</item><item>
<link>http://www.admin99.net/read.php?402</link>
<title>nfs配置的简单例子</title> 
<author>real &lt;real@admin99.net&gt;</author>
<category>linux命令大全</category>
<pubDate>Mon, 17 Nov 2008 13:02:34 +0000</pubDate> 
<guid>http://www.admin99.net/read.php?402</guid> 
<description>
<![CDATA[ 
	最近配置了一台nfs主机，使用中有几点心得，写下来备忘<br/>一是如果server和client如果都处于同一内网，可以使用udp协议，速度能快一些。<br/>二是server端使用async，也就是异步写入。异步写入虽然降低了一点点的数据安全性(意外宕机时可能会损失最后的一些数据)，但性能比同步写入高了很多。<br/>nfs主机部分<br/>启动portmap 和 nfsd服务<br/>vi /etc/exports<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">/data/htdocs/spacemx &nbsp; &nbsp;192.168.0.*(rw,async,anonuid=99,anongid=99)</div></div><br/>其中anonuid＝99是nobody用户，anongid＝99是nobody组<br/>async表明采用异步写入<br/>rw是只可读可写<br/>192.168.0.*表明只对 192.168.0.0/24这个网络中的client开放<br/><br/>client部分<br/>启动portmap服务<br/>建立挂载目录 mkdir /nfs<br/>挂载<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">mount -t nfs -o udp 192.168.0.101:/data/htdocs/spacemx /nfs</div></div><br/>-o udp表明采用udp通信，在内网环境中，网络稳定性比较高，用udp协议有助于提升速度<br/>Tags - <a href="http://www.admin99.net/tag.php?tag=nfs" rel="tag">nfs</a> , <a href="http://www.admin99.net/tag.php?tag=%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86" rel="tag">系统管理</a>
  ]]> 
</description>
</item><item>
<link>http://www.admin99.net/read.php?401</link>
<title>基本转载－nfs相关文档</title> 
<author>real &lt;real@admin99.net&gt;</author>
<category>linux系统相关</category>
<pubDate>Mon, 17 Nov 2008 12:46:14 +0000</pubDate> 
<guid>http://www.admin99.net/read.php?401</guid> 
<description>
<![CDATA[ 
	NFS server可以看作是一个FILE SERVER,它可以让你的PC通过网络将远端得NFS SERVER共享出来的档案MOUNT到自己的系统中，在CLIENT看来使用NFS的远端文件就象是在使用本地文件一样。 <br/> NFS协议从诞生到现在为止，已经有多个版本，如NFS V2（rfc1094）,NFS V3（rfc1813）（最新的版本是V4（rfc3010）。 <br/> 二、各NFS协议版本的主要区别 <br/> V3相对V2的主要区别： <br/> 1、文件尺寸 <br/> V2最大只支持32BIT的文件大小(4G),而NFS V3新增加了支持64BIT文件大小的技术。 <br/> 2、文件传输尺寸 <br/> V3没有限定传输尺寸，V2最多只能设定为8k，可以使用-rsize and -wsize 来进行设定。 <br/> 3、完整的信息返回 <br/> V3增加和完善了许多错误和成功信息的返回，对于服务器的设置和管理能带来很大好处。 <br/> 4、增加了对TCP传输协议的支持 <br/> V2只提供了对UDP协议的支持，在一些高要求的网络环境中有很大限制，V3增加了对TCP协议的支持 <br/> *5、异步写入特性 <br/> 6、改进了SERVER的mount性能 <br/> 7、有更好的I/O WRITES 性能。 <br/> 9、更强网络运行效能，使得网络运作更为有效。 <br/> 10、更强的灾难恢复功能。 <br/> <br/> 异步写入特性（v3新增加）介绍： <br/> NFS V3 能否使用异步写入，这是可选择的一种特性。NFS V3客户端发发送一个异步写入请求到服务器，在给客户端答复之前服务器并不是必须要将数据写入到存储器中（稳定的）。服务器能确定何时去写入数据或者将多个写入请求聚合到一起并加以处理，然后写入。客户端能保持一个数据的copy以防万一服务器不能完整的将数据写入。当客户端希望释放这个copy的时候，它会向服务器通过这个操作过程，以确保每个操作步骤的完整。异步写入能够使服务器去确定最好的同步数据的策略。使数据能尽可能的同步的提交何到达。与V2比较来看，这样的机制能更好的实现数据缓冲和更多的平行（平衡）。而NFS V2的SERVER在将数据写入存储器之前不能再相应任何的写入请求。 <br/> <br/> V4相对V3的改进： <br/> 1：改进了INTERNET上的存取和执行效能 <br/> 2：在协议中增强了安全方面的特性 <br/> 3：增强的跨平台特性 <br/> 三、CLIENT和SERVER的具体操作和设置 <br/> 在讲NFS SERVER的运作之前先来看一些与NFS SERVER有关的东西： <br/> RPC（Remote Procedure Call） <br/> NFS 本身是没有提供信息传输的协议和功能的，但NFS却能让我们通过网络进行资料的分享，这是因为NFS使用了一些其它的传输协议。而这些传输协议勇士用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER.所以只要用到NFS的地方都要启动RPC服务，不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系：NFS是一个文件系统，而RPC是负责负责信息的传输。 <br/> <br/> NFS需要启动的DAEMONS <br/> pc.nfsd:主要复杂登陆权限检测等。 <br/> rpc.mountd：负责NFS的档案系统，当CLIENT端通过rpc.nfsd登陆SERVER后，对clinet存取server的文件进行一系列的管理 <br/> NFS SERVER在REDHAT LINUX平台下一共需要两个套件：nfs-utils和PORTMAP <br/> nfs-utils：提供rpc.nfsd 及 rpc.mountd这两个NFS DAEMONS的套件 <br/> portmap:NFS 其实可以被看作是一个RPC SERVER PROGRAM,而要启动一个RPC SERVER PROGRAM，都要做好PORT的对应工作，而且这样的任务就是由PORTMAP来完成的。通俗的说PortMap就是用来做PORT的mapping的。 <br/> <br/> 一：服务器端的设定（以LINUX为例） <br/> 服务器端的设定都是在/etc/exports这个文件中进行设定的，设定格式如下： <br/> 欲分享出去的目录 主机名称1或者IP1(参数1，参数2） 主机名称2或者IP2（参数3，参数4） <br/> 上面这个格式表示，同一个目录分享给两个不同的主机，但提供给这两台主机的权限和参数是不同的，所以分别设定两个主机得到的权限。 <br/> 可以设定的参数主要有以下这些： <br/> rw：可读写的权限； <br/> ro：只读的权限； <br/> no_root_squash：登入到NFS主机的用户如果是ROOT用户，他就拥有ROOT的权限，此参数很不安全，建议不要使用。 <br/> root_squash：登入到NFS主机的用户如果是ROOT用户，那么就将他的权限压缩为nobody； <br/> all_squash：不管登陆NFS主机的用户是什么都会被重新设定为nobody，这个相对比较安全。 <br/> anonuid：将登入NFS主机的用户都设定成指定的user id,此ID必须存在于/etc/passwd中。 <br/> anongid：同 anonuid ，将登入NFS主机的用户都设定成指定的 group ID 就是了！ <br/> sync：资料同步写入存储器中，比较慢，nfs主机可能会有较高的iowait。 <br/> async：资料会先暂时存放在内存中，不会直接写入硬盘，性能比较高。 <br/> insecure 允许从这台机器过来的非授权访问。 <br/> <br/> 例如可以编辑/etc/exports为： <br/> /tmp　　　　　*(rw,no_root_squash) <br/> /home/public　192.168.0.*(rw)　　 *(ro) <br/> /home/test　　192.168.0.100(rw) <br/> /home/linux　 *.the9.com(rw,all_squash,anonuid=40,anongid=40) <br/> 设定好后可以使用以下命令启动NFS: <br/> /etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默认启动的） <br/> /etc/rc.d/init.d/nfs start <br/> <br/> exportfs命令： <br/> 如果我们在启动了NFS之后又修改了/etc/exports，是不是还要重新启动nfs呢？这个时候我们就可以用exportfs命令来使改动立刻生效，该命令格式如下： <br/> exportfs [-aruv] <br/> -a ：全部mount或者unmount /etc/exports中的内容 <br/> -r ：重新mount /etc/exports中分享出来的目录 <br/> -u ：umount 目录 <br/> -v ：在 export 的?r候，将详细的信息输出到屏幕上。 <br/> 具体例子： <br/> [root @test root]# exportfs -rv <==全部重新 export 一次！ <br/> exporting 192.168.0.100:/home/test <br/> exporting 192.168.0.*:/home/public <br/> exporting *.the9.com:/home/linux <br/> exporting *:/home/public <br/> exporting *:/tmp <br/> reexporting 192.168.0.100:/home/test to kernel <br/> <br/> exportfs -au <==全部都卸载了。 <br/> <br/> <br/> <br/> 客户段的操作： <br/> 1、showmout命令对于NFS的操作和查错有很大的帮助，所以我们先来看一下showmount的用法 <br/> showmout <br/> -a ：这个参数是一般在NFS SERVER上使用，是用来显示已经mount上本机nfs目录的cline机器。 <br/> -e ：显示指定的NFS SERVER上export出来的目录。 <br/> 例如： <br/> showmount -e 192.168.0.30 <br/> Export list for localhost: <br/> /tmp * <br/> /home/linux *.linux.org <br/> /home/public (everyone) <br/> /home/test 192.168.0.100 <br/> 2、mount nfs目录的方法： <br/> mount -t nfs hostname(orIP):/directory /mount/point <br/> 具体例子： <br/> Linux: mount -t nfs 192.168.0.1:/tmp /mnt/nfs <br/> Solaris:mount -F nfs 192.168.0.1:/tmp /mnt/nfs <br/> BSD: mount 192.168.0.1:/tmp /mnt/nfs <br/> <br/> 3、mount nfs的其它可选参数： <br/> HARD mount和SOFT MOUNT： <br/> HARD: NFS CLIENT会不断的尝试与SERVER的连接（在后台，不会给出任何提示信息,在LINUX下有的版本仍然会给出一些提示），直到MOUNT上。 <br/> SOFT:会在前台尝试与SERVER的连接，是默认的连接方式。当收到错误信息后终止mount尝试，并给出相关信息。 <br/> 例如：mount -F nfs -o hard 192.168.0.10:/nfs /nfs <br/> 对于到底是使用hard还是soft的问题，这主要取决于你访问什么信息有关。例如你是想通过NFS来运行X PROGRAM的话，你绝对不会希望由于一些意外的情况（如网络速度一下子变的很慢，插拔了一下网卡插头等）而使系统输出大量的错误信息，如果此时你用的是HARD方式的话，系统就会等待，直到能够重新与NFS SERVER建立连接传输信息。另外如果是非关键数据的话也可以使用SOFT方式，如FTP数据等，这样在远程机器暂时连接不上或关闭时就不会挂起你的会话过程。 <br/> <br/> rsize和wsize： <br/> 文件传输尺寸设定：V3没有限定传输尺寸，V2最多只能设定为8k，可以使用-rsize and -wsize 来进行设定。这两个参数的设定对于NFS的执行效能有较大的影响 <br/> bg：在执行mount时如果无法顺利mount上时，系统会将mount的操作转移到后台并继续尝试mount，直到mount成功为止。（通常在设定/etc/fstab文件时都应该使用bg，以避免可能的mount不上而影响启动速度） <br/> fg：和bg正好相反，是默认的参数 <br/> nfsvers＝n:设定要使用的NFS版本，默认是使用2，这个选项的设定还要取决于server端是否支持NFS VER 3 <br/> mountport：设定mount的端口 <br/> port：根据server端export出的端口设定，例如如果server使用5555端口输出NFS,那客户端就需要使用这个参数进行同样的设定 <br/> timeo=n: 设置超时时间，当数据传输遇到问题时，会根据这个参数尝试进行重新传输。默认值是7/10妙（0.7秒）。如果网络连接不是很稳定的话就要加大这个数值，并且推荐使用HARD MOUNT方式，同时最好也加上INTR参数，这样你就可以终止任何挂起的文件访问。 <br/> intr 允许通知中断一个NFS调用。当服务器没有应答需要放弃的时候有用处。 <br/> udp：使用udp作为nfs的传输协议（NFS V2只支持UDP) <br/> tcp：使用tcp作为nfs的传输协议 <br/> namlen=n：设定远程服务器所允许的最长文件名。这个值的默认是255 <br/> acregmin=n：设定最小的在文件更新之前cache时间，默认是3 <br/> acregmax=n：设定最大的在文件更新之前cache时间，默认是60 <br/> acdirmin=n：设定最小的在目录更新之前cache时间，默认是30 <br/> acdirmax=n：设定最大的在目录更新之前cache时间，默认是60 <br/> actimeo=n：将acregmin、acregmax、acdirmin、acdirmax设定为同一个数值，默认是没有启用。 <br/> retry=n：设定当网络传输出现故障的时候，尝试重新连接多少时间后不再尝试。默认的数值是10000 minutes <br/> noac:关闭cache机制。 <br/> 同时使用多个参数的方法：mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp /nfs <br/> 请注意，NFS客户机和服务器的选项并不一定完全相同，而且有的时候会有冲突。比如说服务器以只读的方式导出，客户端却以可写的方式mount,虽然可以成功mount上，但尝试写入的时候就会发生错误。一般服务器和客户端配置冲突的时候，会以服务器的配置为准。 <br/> <br/> <br/> 4、/etc/fstab的设定方法 <br/> /etc/fstab的格式如下： <br/> fs_spec　　　fs_file　　fs_type　　　fs_options　　fs_dump　fs_pass　 <br/> fs_spec:该字段定义希望加载的文件系统所在的设备或远程文件系统,对于nfs这个参数一般设置为这样：192.168.0.1:/NFS <br/> fs_file:本地的挂载点 <br/> fs_type：对于NFS来说这个字段只要设置成nfs就可以了 <br/> fs_options:挂载的参数，可以使用的参数可以参考上面的mount参数。 <br/> fs_dump　-　该选项被"dump"命令使用来检查一个文件系统应该以多快频率进行转储，若不需要转储就设置该字段为0 <br/> fs_pass　-　该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序，根文件系统"/"对应该字段的值应该为1，其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该字段为0 。 <br/> <br/> 5、与NFS有关的一些命令介绍 <br/> nfsstat: <br/> 查看NFS的运行状态，对于调整NFS的运行有很大帮助 <br/> rpcinfo： <br/> 查看rpc执行信息，可以用于检测rpc运行情况的工具。 <br/> <br/> <br/> <br/> 四、NFS调优 <br/> 调优的步骤： <br/> 1、测量当前网络、服务器和每个客户端的执行效率。 <br/> 2、分析收集来的数据并画出图表。查找出特殊情况，例如很高的磁盘和CPU占用、已经高的磁盘使用时间 <br/> 3、调整服务器 <br/> 4、重复第一到第三步直到达到你渴望的性能 <br/> <br/> <br/> 与NFS性能有关的问题有很多，通常可以要考虑的有以下这些选择： <br/> <br/> WSIZE,RSIZE参数来优化NFS的执行效能 <br/> WSIZE、RSIZE对于NFS的效能有很大的影响。 <br/> wsize和rsize设定了SERVER和CLIENT之间往来数据块的大小，这两个参数的合理设定与很多方面有关，不仅是软件方面也有硬件方面的因素会影响这两个参数的设定（例如LINUX KERNEL、网卡，交换机等等）。 <br/> 下面这个命令可以测试NFS的执行效能，读和写的效能可以分别测试，分别找到合适的参数。对于要测试分散的大量的数据的读写可以通过编写脚本来进行测试。在每次测试的时候最好能重复的执行一次MOUNT和unmount。 <br/> time dd if=/dev/zero of=/mnt/home/testfile bs=16k count=16384 <br/> 用于测试的WSIZE,RSIZE最好是1024的倍数，对于NFS V2来说8192是RSIZE和WSIZE的最大数值，如果使用的是NFS V3则可以尝试的最大数值是32768。 <br/> 如果设置的值比较大的时候，应该最好在CLIENT上进入mount上的目录中，进行一些常规操作（LS,VI等等），看看有没有错误信息出现。有可能出现的典型问题有LS的时候文件不能完整的列出或者是出现错误信息，不同的操作系统有不同的最佳数值，所以对于不同的操作系统都要进行测试。 <br/> <br/> 设定最佳的NFSD的COPY数目。 <br/> linux中的NFSD的COPY数目是在/etc/rc.d/init.d/nfs这个启动文件中设置的，默认是8个NFSD,对于这个参数的设置一般是要根据可能的CLIENT数目来进行设定的，和WSIZE、RSIZE一样也是要通过测试来找到最近的数值。 <br/> <br/> UDP and TCP <br/> 可以手动进行设置，也可以自动进行选择。 <br/> mount -t nfs -o sync,tcp,noatime,rsize=1024,wsize=1024 EXPORT_MACHINE:/EXPORTED_DIR /DIR <br/> UDP 有着传输速度快，非连接传输的便捷特性，但是UDP在传输上没有TCP来的稳定，当网络不稳定或者黑客入侵的时候很容易使NFS 的 Performance 大幅降低甚至使网络瘫痪。所以对于不同情况的网络要有针对的选择传输协议。nfs over tcp比较稳定，nfs over udp速度较快。在机器较少网络状况较好的情况下使用UDP协议能带来较好的性能，当机器较多，网络情况复杂时推荐使用TCP协议（V2只支持UDP协议）。在局域网中使用UDP协议较好，因为局域网有比较稳定的网络保证，使用UDP可以带来更好的性能，在广域网中推荐使用TCP协议，TCP协议能让NFS在复杂的网络环境中保持最好的传输稳定性。可以参考这篇文章：http://www.hp.com.tw/ssn/unix /0212/unix021204.asp <br/> <br/> 版本的选择 <br/> V3作为默认的选择（RED HAT 8默认使用V2,SOLARIS 8以上默认使用V3），可以通过vers= mount option来进行选择。 <br/> LINUX通过mount option的nfsvers=n进行选择。 <br/> <br/> 五、NFS故障解决 <br/> 1、NFSD没有启动起来 <br/> 首先要确认 NFS 输出列表存在，否则 nfsd 不会启动。可用 exportfs 命令来检查，如果 exportfs 命令没有结果返回或返回不正确，则需要检查 /etc/exports 文件。 <br/> 2、mountd 进程没有启动 <br/> mountd 进程是一个远程过程调用 (RPC) ，其作用是对客户端要求安装（mount）文件系统的申请作出响应。mountd进程通过查找 /etc/xtab文件来获知哪些文件系统可以被远程客户端使用。另外，通过mountd进程，用户可以知道目前有哪些文件系统已被远程文件系统装配，并得知远程客户端的列表。查看mountd是否正常启动起来可以使用命令rpcinfo进行查看，在正常情况下在输出的列表中应该象这样的行： <br/> 100005 1 udp 1039 mountd <br/> 100005 1 tcp 1113 mountd <br/> 100005 2 udp 1039 mountd <br/> 100005 2 tcp 1113 mountd <br/> 100005 3 udp 1039 mountd <br/> 100005 3 tcp 1113 mountd <br/> 如果没有起来的话可以检查是否安装了PORTMAP组件。 <br/> rpm -qa&#124;grep portmap <br/> 3、fs type nfs no supported by kernel <br/> kernel不支持nfs文件系统，重新编译一下KERNEL就可以解决。 <br/> 4、can't contact portmapper: RPC: Remote system error - Connection refused <br/> 出现这个错误信息是由于SEVER端的PORTMAP没有启动。 <br/> 5、mount clntudp_create: RPC: Program not registered <br/> NFS没有启动起来，可以用showmout -e host命令来检查NFS SERVER是否正常启动起来。 <br/> 6、mount: localhost:/home/test failed, reason given by server: Permission denied <br/> 这个提示是当client要mount nfs server时可能出现的提示，意思是说本机没有权限去mount nfs server上的目录。解决方法当然是去修改NFS SERVER咯。 <br/> 7、被防火墙阻挡 <br/> 这个原因很多人都忽视了，在有严格要求的网络环境中，我们一般会关闭linux上的所有端口，当需要使用哪个端口的时候才会去打开。而NFS默认是使用111端口，所以我们先要检测是否打开了这个端口，另外也要检查TCP_Wrappers的设定。 <br/> <br/> <br/> 六、NFS安全 <br/> NFS的不安全性主要体现于以下4个方面: <br/> <br/> 1、新手对NFS的访问控制机制难于做到得心应手,控制目标的精确性难以实现 <br/> 2、NFS没有真正的用户验证机制,而只有对RPC/Mount请求的过程验证机制 <br/> 3、较早的NFS可以使未授权用户获得有效的文件句柄 <br/> 4、在RPC远程调用中,一个SUID的程序就具有超级用户权限. <br/> <br/> 加强NFS安全的方法： <br/> 1、合理的设定/etc/exports中共享出去的目录，最好能使用anonuid，anongid以使MOUNT到NFS SERVER的CLIENT仅仅有最小的权限，最好不要使用root_squash。 <br/> 2、使用IPTABLE防火墙限制能够连接到NFS SERVER的机器范围 <br/> iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT <br/> iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT <br/> iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT <br/> iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT <br/> 3、为了防止可能的Dos攻击，需要合理设定NFSD 的COPY数目。 <br/> 4、修改/etc/hosts.allow和/etc/hosts.deny达到限制CLIENT的目的 <br/> /etc/hosts.allow <br/> portmap: 192.168.0.0/255.255.255.0 : allow <br/> portmap: 140.116.44.125 : allow <br/> <br/> /etc/hosts.deny <br/> portmap: ALL : deny <br/> 5、改变默认的NFS 端口 <br/> NFS默认使用的是111端口，但同时你也可以使用port参数来改变这个端口，这样就可以在一定程度上增强安全性。 <br/> 6、使用Kerberos V5作为登陆验证系统<br/>Tags - <a href="http://www.admin99.net/tag.php?tag=nfs" rel="tag">nfs</a> , <a href="http://www.admin99.net/tag.php?tag=%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86" rel="tag">系统管理</a>
  ]]> 
</description>
</item><item>
<link>http://www.admin99.net/read.php?400</link>
<title>通过linux管道加快oracle exp/imp的速度</title> 
<author>real &lt;real@admin99.net&gt;</author>
<category>oracle</category>
<pubDate>Sun, 16 Nov 2008 02:00:31 +0000</pubDate> 
<guid>http://www.admin99.net/read.php?400</guid> 
<description>
<![CDATA[ 
	通过exp直接导出的dmp文件，经过gzip压缩后，一般能减少60～80％的磁盘空间<br/>exp和imp不能像mysqldump那样直接使用管道命令"&#124;"，所以需要使用管道文件<br/><br/>1.通过 mknod /tmp/pipe p 建立管道文件，不要忘了参数p<br/>2.通过 exp和 gzip导出数据到建立的管道并压缩<br/> &nbsp; &nbsp;exp test/test file=/tmp/pipe & gzip < /tmp/pipe > exp.dmp.gz<br/>3.导出成功完成之后删除建立的管道<br/> &nbsp; &nbsp;rm &nbsp; &nbsp;-rf &nbsp; &nbsp;/tmp/pipe<br/><br/>下面是个自动导出的脚本<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">export ORACLE_HOME=/usr/local/opt/oracle/product/9204;<br/>export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;<br/>export ORACLE_SID=orcl;<br/>mknod /tmp/pipe p;<br/>exp admin99/admin99passwd owner=admin99 file=/tmp/pipe & gzip < /tmp/pipe > /home/oracle/backup/admin99$(date +%Y%m%d).dmp.gz;<br/>rm -rf /tmp/pipe;<br/>rm -rf /home/oracle/backup/*$(date +%Y%m%d -d '7 days ago')*</div></div><br/>可以自动完成备份并删除7天前的备份数据<br/>Tags - <a href="http://www.admin99.net/tag.php?tag=oracle" rel="tag">oracle</a>
  ]]> 
</description>
</item><item>
<link>http://www.admin99.net/read.php?399</link>
<title>mysql日志中的一个错误，关于innodb_log_file_size</title> 
<author>real &lt;real@admin99.net&gt;</author>
<category>mysql</category>
<pubDate>Sat, 15 Nov 2008 07:24:07 +0000</pubDate> 
<guid>http://www.admin99.net/read.php?399</guid> 
<description>
<![CDATA[ 
	发现mysql 的error log中的一段日志<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">081103 15:05:44 &nbsp;InnoDB: ERROR: the age of the last checkpoint is 9433679,<br/>InnoDB: which exceeds the log group capacity 9433498.<br/>InnoDB: If you are using big BLOB or TEXT rows, you must set the<br/>InnoDB: combined size of log files at least 10 times bigger than the<br/>InnoDB: largest such row.</div></div><br/>查了一下是设置的innodb_log_file_size太小了，加大之后就好了，步骤如下<br/>关闭mysql<br/>修改my.cnf 将innodb_log_file_size从原来默认的5m改为100m<br/>将mysql/data目录下的ib_logfile0，ib_logfile1这两个文件移走<br/>启动mysql<br/>Tags - <a href="http://www.admin99.net/tag.php?tag=mysql" rel="tag">mysql</a>
  ]]> 
</description>
</item><item>
<link>http://www.admin99.net/read.php?398</link>
<title>nginx 不记录部分日志</title> 
<author>real &lt;real@admin99.net&gt;</author>
<category>nginx</category>
<pubDate>Sat, 15 Nov 2008 06:58:31 +0000</pubDate> 
<guid>http://www.admin99.net/read.php?398</guid> 
<description>
<![CDATA[ 
	日志太多，每天好几个G，少记录一些，下面的配置写到server{}段中就可以了<br/>location ~ .*&#92;.(js&#124;jpg&#124;JPG&#124;jpeg&#124;JPEG&#124;css&#124;bmp&#124;gif&#124;GIF)$ <br/>{<br/> &nbsp; &nbsp; &nbsp;access_log off;<br/>}<br/>Tags - <a href="http://www.admin99.net/tag.php?tag=nginx" rel="tag">nginx</a>
  ]]> 
</description>
</item><item>
<link>http://www.admin99.net/read.php?397</link>
<title>word打开文档很慢</title> 
<author>real &lt;real@admin99.net&gt;</author>
<category>windows</category>
<pubDate>Wed, 12 Nov 2008 07:44:48 +0000</pubDate> 
<guid>http://www.admin99.net/read.php?397</guid> 
<description>
<![CDATA[ 
	word打开文档很慢很慢，如果不管它，可能要十几分钟才能打开。如果在桌面上刷新几下，可能还能快些，但这也太麻烦了，总不能为了打开个word文档而在桌面上不停地刷吧<br/>网上有很多关于这个问题的帖子，说的内容主要有这么几点点：<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">1、先打开杀毒软件，到设置 －>详细设置下，找到嵌入式杀毒，然后将”使用Office/IE嵌入式杀毒”前面的勾取消。<br/>2、到杀毒软件的监控中心，取消“启用文件监控”设置。<br/>3、到C:&#92;Program Files&#92;Microsoft Office&#92;OFFICE11&#92;STARTUP下（假定OFFICE装在了这个路径下），找到两个文件MathPage和MathType Commands 5 For Word，将它们先备份到其它路径下，之后再删除这两个文件。然后重新启动WORD，就会马上打开文件了。如果你还想要扫描，就把这两个文件再拷贝回来即可。<br/>需要指出的是，第3步是最主要的步骤，如果不进行步骤1、2的操作，问题也不大，即使WORD文件打开时还显示“正在运行病毒扫描"，但文件也会马上打开，之前文件之所以打开慢，完全是由于Mathtype在OFFICE上装了模版所致，杀毒软件扫描文件是很快的，但扫描模板却很慢，所以只要把模板启动文件删除了，速度就会马上加快，第1、2步并非是必须的，所以，如果你还想继续保持”使用Office/IE嵌入式杀毒”和“启用文件监控 ”，都基本不会对打开文件产生太大影响，但如果Mathtype在OFFICE上装了模版，打开文件过慢，却是真正的元凶。</div></div><br/>不过我试了试，却没有用。禁用了瑞星的文件监控和office/IE嵌入式杀毒之后，还是会在打开文件前运行病毒扫描...<br/>而且我的那个startup文件夹下根本没有任何文件。<br/><br/>后来无意中，打开文件之后，点击“工具”-->“模板和加载项”，发现“公用模板及加载项”里面显示当前已加载的的一个项目叫做foxmail.dot，路径为C:&#92;Documents and Settings&#92;Administrator&#92;Application Data&#92;Microsoft&#92;Word&#92;STARTUP 于是到这个文件夹下删除了 foxmail.dot这个文件，再打开word文档，右下角还是会显示正在运行病毒扫描，但至少不会卡住了，打开文件的速度变得正常了，也就一秒不到的样子(我的本本配置比较低)。<br/><br/>顺便转一些别人说的，能加快打开速度的设置<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">关闭不常用的功能——加快Word运行速度<br/>一、任务窗格[/color][/b]<br/>当启动Word程序时，任务窗格自动装载。任务窗格包括“打开”、“其他”和“新建文档”3栏，<br/>“打开”栏列出最近使用的文件，“其他”栏可能打开别的文档，“新建文档”栏可以新建一个档。而我们平常打一篇新文章，双击桌面Word图标即自动进入一个新文档了，如果是要打开一篇文章，可以点工具栏的“打开”按钮。因此，任务窗格是完全没必要的。<br/>那么，怎么取消任务窗格呢?其实不难，单击菜单栏的“工具”---“选项<br/>单击“视图”，将“启动任务窗格”前面的勾取消，点击“确定”即可。<br/><br/>二、文章中文字的智能提示和语法修正】<br/>许多读者肯定深有体会：在Word中的智能提示和语法自动修正提示并不是很有效，把不必要的提示显示出来，许多时候甚至把文章中正确的词或者语法提示出来，而错的语法和词却没有提示出来，让人啼笑皆非。因此很多人并没有使用这项功能。<br/>取消办法：首先，单击菜单栏的“工具”---“选项”，选择视图<br/>分别将“屏幕提示”、“智能标记”、“动态文字”前面的勾取消。<br/>其次，单击“拼写和语法<br/>将“拼写”中的“键入时检查接写”、“总提出更正建议”和“语法”中的“键入时检查语法”、“随拼写检查语法”前面的勾分别取消，点“确定”即可。<br/><br/>三、Word中的链接和更新<br/>在Word中，提供了一些帮助网页链接和内容更新，当我们打开Word时就会自动链接网页并更新内容，造成时间的浪费，而这些内容并不是我们想要的。<br/>取消方法：单击菜单栏的“工具”---“选项”，选择“常规”，】<br/>将“打开时更新自动方式的链接”前面的勾取消；<br/>点击窗口下方的“服务选项<br/>将“该文档是工作区……”、“有一些关于此……”前面的勾取消；<br/>在“打开文档时，获取文档和工作区的更新”下方，选择“从不)；<br/>在“关闭文档时，用您的更改更新工作区副本”，选择“从不”。<br/>选择“客户反馈选项<br/>在提示“是”或“否”两栏选择中选择“否”。<br/>点击“在线内容<br/>将“显示……的内容和链接”前的勾取消。<br/>点击“web选项”，选择“文件<br/>将图中的第3、4、5个勾取消。<br/>单击菜单栏的“工具”---“选项”，选择“编辑<br/>将“提示更新样式”、“保持格式跟踪”前的勾取消。</div></div><br/>Tags - <a href="http://www.admin99.net/tag.php?tag=windows" rel="tag">windows</a> , <a href="http://www.admin99.net/tag.php?tag=%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96" rel="tag">性能优化</a>
  ]]> 
</description>
</item><item>
<link>http://www.admin99.net/read.php?396</link>
<title>关于php-cgi 的 SIGSEGV 错误的一些想法</title> 
<author>real &lt;real@admin99.net&gt;</author>
<category>php</category>
<pubDate>Tue, 11 Nov 2008 07:31:19 +0000</pubDate> 
<guid>http://www.admin99.net/read.php?396</guid> 
<description>
<![CDATA[ 
	几台使用了 nginx+php-fpm 的机器上，偶尔能看到php-fpm.log中有这样的内容<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">Oct 28 23:13:53.849419 [NOTICE] fpm_got_signal(), line 73: received SIGCHLD<br/>Oct 28 23:13:53.849490 [WARNING] fpm_children_bury(), line 229: child 15044 (pool default) exited on signal 11 SIGSEGV after 1.332818 seconds<br/>Oct 28 23:13:53.850341 [NOTICE] fpm_children_make(), line 305: child 15122 (pool default) started</div></div><br/>如果得到SIGSEGV信号的进程比较多的话，还能看到如下的日志<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">Oct 28 09:03:15.812009 [WARNING] fpm_children_bury(), line 256: failed processes threshold (10 in 60 sec) is reached, initiating reload<br/>Oct 28 09:03:15.812030 [NOTICE] fpm_pctl(), line 208: switching to 'reloading' state</div></div><br/>然后php-fpm就会重启。其中的<br/>failed processes threshold (10 in 60 sec) is reached<br/>是在php-fpm.conf中设置的，表示在60秒内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过10个，php-fpm就会重启。可以通过把php-fpm.conf中的 emergency_restart_threshold的值设置的大一些来增加这个重启的阀值，比如增加到60个，在有些时候，这能够避免php-fpm重启，但这并不是解决问题的根本办法<br/><br/>SIGSEGV信号一般表示<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">SIGSEGV --- Segment Fault. The possible cases of your encountering this error are: <br/>1.buffer overflow --- usually caused by a pointer reference out of range. <br/>2.stack overflow --- please keep in mind that the default stack size is 8192K. <br/>3.illegal file access --- file operations are forbidden on our judge system</div></div><br/>其中的第三条，跟本问题的关系比较大。也就是php-cgi访问了一个不存在的或者没有权限访问的文件<br/>我用的php-fpm补丁是0.5.8版的，按照一些说法，只要设置了<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">fastcgi_param &nbsp;SCRIPT_NAME &nbsp; &nbsp; &nbsp; &nbsp;$fastcgi_script_name;</div></div><br/>之后，php-cgi如果找不到文件或者没有权限访问的话 会提示No input file specified. 或者Access denied.<br/>问题到这里似乎又陷入了僵局<br/>后来又在php.ini中找到了php-cgi的一个参数 cgi.fix_pathinfo<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">cgi.fix_pathinfo &nbsp;boolean<br/>对 CGI 提供了真正的 PATH_INFO/PATH_TRANSLATED 支持。以前 PHP 的行为是将 PATH_TRANSLATED 设为 SCRIPT_FILENAME，而不管 PATH_INFO 是什么。有关 PATH_INFO 的更多信息见 cgi 规格。将此值设为 1 将使 PHP CGI 修正其路径以遵守规格。设为 0 将使 PHP 的行为和从前一样。默认为零。用户应该修正其脚本使用 SCRIPT_FILENAME 而不是 PATH_TRANSLATED。</div></div><br/>把这个参数的值设置为1 ，cgi会多做一些检查，来判断请求的路径中，那部分是文件名，哪部分是路径名<br/>下面是google groups上的一段话<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">when cgi.fix_pathinfo was set to "1" it caused a lot of checks in order to find which part of SCRIPT_FILENAME is a file name and which is PATH_INFO. In case of missing file it caused NULL<br/>in path_translated, which caused the crash.</div></div><br/>此问题已经耗费了我太多的精力，已经不愿意多花时间去查问题了。比如，可以使用gbd来查看php-cgi 出错以后产生的dump文件。但这个问题只是偶尔发生，很难捕捉到。如果有兄弟也遇到这个问题，或者你有更好的解决办法，不妨大家交流一下<br/>修改此参数后，观察了一段时间，SIGSEGV错误在一些服务器上确实消失了。<br/>补充一下 11月10日早上6点半左右到9点26分，三台服务器(给校内网做的app)同时出现了大量的SIGSEGV错误，校内的服务器出的故障，在我这几台服务器上产生了大量的不正确的 post / ，后来问校内的工程师，他们只说服务down掉了，却不肯略微详细的说一下情况。后来我模拟这些post，确没出问题？？奇怪了<br/>Tags - <a href="http://www.admin99.net/tag.php?tag=php" rel="tag">php</a>
  ]]> 
</description>
</item><item>
<link>http://www.admin99.net/read.php?395</link>
<title>转载 mysql 优化的一些小窍门</title> 
<author>real &lt;real@admin99.net&gt;</author>
<category>mysql</category>
<pubDate>Sat, 08 Nov 2008 14:48:36 +0000</pubDate> 
<guid>http://www.admin99.net/read.php?395</guid> 
<description>
<![CDATA[ 
	 &nbsp; &nbsp;* 针对Innodb表,尽量不执行SELECT COUNT(*)语句,因为Innodb表没有类似MyISAM那样的内部计数器来记录表记录总量,执行这个操作将会全表扫描,速度很慢.<br/> &nbsp; &nbsp;* 尽量使用MyISAM表,除非必须使用其他类型,因为MyISAM类型的总体读写效率是相当高的,缺点是表级锁,而不是行/页级锁.<br/> &nbsp; &nbsp;* 善用EXPLAIN来帮助你分析查询优化情况<br/> &nbsp; &nbsp;* 如果需要对一个较大的且并发读写较多的数据表做GROUP BY等统计操作,建议使用摘要表来存储统计信息,定期更新统计表,这可能获得很大的性能改善.<br/> &nbsp; &nbsp;* 查询时如果有ORDER BY分句的话,注意让它的字段顺序和索引字段顺序对应,这样能加快排序速度<br/> &nbsp; &nbsp;* 如果有一个多字段索引,则查询时,必须按照索引顺序来使用,否则该索引不会用到.例如:<br/> &nbsp; &nbsp; &nbsp;索引`idx_`(col1, col2, col3),那么查询SELECT .... FROM ... WHERE col1=1 AND col2=2;使用索引,而查询... WHERE col2=2 AND col3=3;或... WHERE col1=1 AND col3=3;则不使用索引.<br/> &nbsp; &nbsp;* WHERE中的条件如果有恒量类型的(如 `field` = 1),就尽量放在前面,这样能更快的执行过滤.<br/> &nbsp; &nbsp;* 2 个表连接时,连接字段的类型最好一致(包括字段长度),这样的话索引速度快多了.<br/> &nbsp; &nbsp;* 大部分情况下,字符类型的字段索引值需要一部分,例如CREATE INDEX char_idx ON tbl1 ( name(10) );<br/> &nbsp; &nbsp;* 尽量使用最合适的数据类型,能使用ENUM就不使用TINYINT,能使用SMALLINT就不使用MEDIUMINT.这样能节省存储空间,增加数据存储量,提高搜索速度.不要担心这样会对省级产生很大的影响,因为加入从TINYINT类型改变为INT的话,并不会改变原来的数据.<br/> &nbsp; &nbsp;* 如果知道某个表总是频繁使用的话,可以把它放到hot_cache中,用以下方法:<br/><br/> &nbsp; &nbsp; &nbsp;SET GLOBAL hot_cache.key_buffer_size=128*1024;<br/> &nbsp; &nbsp; &nbsp;CACHE INDEX `xxx` IN hot_cache;<br/><br/> &nbsp; &nbsp;* 把拖沓复杂,速度慢的的查询分解成多个简洁明了的查询,这样尽管查询次数多了,但是总体速度和效率却可能反而更高了,而且也减少了锁表的可能.<br/> &nbsp; &nbsp;* 执行查询时,尽量不使用外部函数,因为这样的话就无法使用可能存在的索引,并且无论如何都会极大地降低效率.如:... WHERE `create_time` > UNIX_TIMESTAMP(NOW());这样的查询.可以在程序中把当前的时间取得,然后直接执行构造好了的SQL语句.<br/> &nbsp; &nbsp;* 在索引字段上使用 LIKE 查询时,左边不要使用 '%' 修饰符,这样就可以利用索引,否则无法使用索引.如... `name` LIKE 'yejr%';.<br/> &nbsp; &nbsp;* 如果有可能,多使用存储过程,这大概能获得 22% 的性能提高.<br/> &nbsp; &nbsp;* 如果并发访问量相对最大连接数小多了的话,最好使用永久连接,这样能节省不少连接时的系统资源损耗.<br/> &nbsp; &nbsp;* 定期的在MyISAM表上执行OPTIMIZE TABLE,这能整理随便,提高索引效率.<br/> &nbsp; &nbsp;* 如果你主要按 col1，col2，...顺序检索记录,请在对表大量更改后执行ALTER TABLE ... ORDER BY col1, col2, ...语句,这可以获得更好的性能.<br/> &nbsp; &nbsp;* 对于频繁更改的MyISAM表,应尽量避免更新所有变长字段(VARCHAR、BLOB和TEXT).<br/> &nbsp; &nbsp;* 对于记录总数超过500万的单表,就应该赶紧考虑分表了.分表策略有多种,比如按ID号段,或者按时间切分,等等.<br/> &nbsp; &nbsp;* 创建数据表时尽量指定字段不能为NULL,并且有默认值.<br/> &nbsp; &nbsp;* 使用LOAD DATA,而不是使用大批量的INSERT语句来导入数据.<br/> &nbsp; &nbsp;* 使数据表名和字段名尽可能的短,例如在user表中使用字段名name,而不是user_name.<br/> &nbsp; &nbsp;* 用DELAY_KEY_WRITE = 1选项让MyISAM更快地更新索引,因为在表关闭之前它们不刷新到硬盘上.缺点是如果服务器如果突然被杀掉了,重启之后就必须运行myisamchk修复索引才行.<br/> &nbsp; &nbsp;* 采用复制机制来分摊读数据的负载,把写数据只放在主服务器上,把读平均分摊到各个从服务器上,能大大提高系统负载.<br/>Tags - <a href="http://www.admin99.net/tag.php?tag=mysql" rel="tag">mysql</a>
  ]]> 
</description>
</item><item>
<link>http://www.admin99.net/read.php?394</link>
<title>开启 Apache Server Status</title> 
<author>real &lt;real@admin99.net&gt;</author>
<category>Apache</category>
<pubDate>Sat, 08 Nov 2008 14:46:19 +0000</pubDate> 
<guid>http://www.admin99.net/read.php?394</guid> 
<description>
<![CDATA[ 
	Apache 1.3.2及以后的版本中就自带一个查看Apache状态的功能模块server-status<br/>一般默认状态下，apache安装的时候已经将mod_status模块安装了，只是模式情况下没有启用<br/>在httpd.conf中，找到<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">&lt;Location /server-status&gt;<br/> &nbsp; &nbsp;SetHandler server-status<br/> &nbsp; &nbsp;Order deny,allow<br/> &nbsp; &nbsp;Deny from all<br/> &nbsp; &nbsp;Allow from .example.com<br/>&lt;/Location&gt;</div></div><br/>将其中的 .example.com 改为自己的域名，比如www.admin99.net<br/>将前面的注释去掉，重启apache，即可通过 http://www.admin99.net/server-status来访问。<br/>可以通过http://www.admin99.net/server-status?refresh=5来自动刷新当前的状态信息，5秒刷新一次<br/>另外，如果想要看当前的详细请求信息的话，可以将<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">ExtendedStatus On</div></div><br/>的注释也去掉，不过这样会比较明显的加重服务器的负担，不推荐。<br/>Tags - <a href="http://www.admin99.net/tag.php?tag=apache" rel="tag">apache</a>
  ]]> 
</description>
</item>
</channel>
</rss>