July 8, 2010
ubuntu开启SSH服务
"\u003cp\u003e网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务。最终成功的方法如下:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esudo apt-get install openssh-server\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eUbuntu缺省安装了openssh-client,所以在这里就不安装了,如果你的系统没有安装的话,再用apt-get安装上即可。\u003c/p\u003e\n\u003cp\u003e然后确认sshserver是否启动了:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eps -e |grep ssh\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e如果只有ssh-agent那ssh-server还没有启动,需要/etc/init.d/ssh start,如果看到sshd那说明ssh-server已经启动了。\u003c/p\u003e\n\u003cp\u003essh-server配置文件位于/ etc/ssh/sshd_config,在这里可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222。然后重启SSH服务:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003esudo /etc/init.d/ssh resar\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003essh连接:ssh \u003ca href=\"mailto:xjtu129@202.117.15.165\"\u003exjtu129@202.117.15.165\u003c/a\u003e\u003c/p\u003e"
July 7, 2010
再跟 Flickr 学习网站运维经验
"\u003cp\u003e学习了一下 Flickr 的运维工程师 John Allspaw 的这个\u003ca href=\"http://www.slideshare.net/jallspaw/operational-efficiency-hacks-web20-expo2009\"\u003eOperational Efficiency Hacks\u003c/a\u003e 讲座内容。做一点笔记。\u003c/p\u003e\n\u003cp\u003e现在 Flickr 的数据相比\u003ca href=\"http://www.dbanotes.net/web/flickr_lamp_capacity_planning.html\"\u003e2007 年\u003c/a\u003e的时候真是有了显著的增长:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e24 TB 的 MySQL 数据\u003c/li\u003e\n\u003cli\u003e每秒钟 MySQL 有 3.2 万次写操作\u003c/li\u003e\n\u003cli\u003e每秒钟 MySQL 有 12万次读操作\u003c/li\u003e\n\u003cli\u003e图片容量 6 PB\u003c/li\u003e\n\u003cli\u003e每天要用掉 10TB 存储\u003c/li\u003e\n\u003cli\u003e超过 15000 个服务监控点\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e在 2004 年的时候 ,Flickr 使用 \u003ca href=\"http://www.imagemagick.org/\"\u003eImageMagick\u003c/a\u003e (version 6.1.9)之后转移到 \u003ca href=\"http://www.graphicsmagick.org/\"\u003eGraphicsMagick\u003c/a\u003e, 我还\u003ca href=\"http://www.dbanotes.net/arch/yupoo_arch.html\"\u003e以为\u003c/a\u003e是因为版权问题,现 在知道这样做是因为速度,换用 GraphicsMagick 处理速度提升了 15%,而 ImageMagick 功能尽管强大,但都是 Flickr 用不到的功能。如无必要,勿增实体啊。GraphicsMagick 在并行方面(\u003ca href=\"http://openmp.org/wp/\"\u003eOpenMP\u003c/a\u003e)的支持也很不错(\u003ca href=\"http://www.kitchensoap.com/2008/09/02/why-we-use-graphicsmagick/\"\u003e参 考\u003c/a\u003e)。\u003c/p\u003e\n\u003cp\u003e除了技术手段的优化,Flickr 充分利用硬件本身的更新换代带来的好处,曾经用 18 台新机器替换掉原来的 67 台 Web 服务器, …\u003c/p\u003e"
July 7, 2010
高并发高流量网站架构
"\u003cp\u003eWeb2.0的兴起,掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念,细分了网站功能和用户群,不仅成功的造就了一大批新生的网站,也 极大的方便了上网的人们。但Web2.0以用户为导向的理念,使得新生的网站有了新的特点——高并发,高流量,数据量大,逻辑复杂等,对网站建设也提出了 新的要求。\u003c/p\u003e\n\u003cp\u003e本文围绕高并发高流量的网站架构设计问题,主要研究讨论了以下内容:\u003c/p\u003e\n\u003cp\u003e首先在整个网络的高度讨论了使用镜像网站,CDN内容分发网络等技术对负载均衡带来的便利及各自的优缺点比较。然后在局域网层次对第四层交换技术,包括硬 件解决方案F5和软件解决方案LVS,进行了简单的讨论。接下来在单服务器层次,本文着重讨论了单台服务器的Socket优化,硬盘级缓存技术,内存级缓 存技术,CPU与IO平衡技术(即以运算为主的程序与以数据读写为主的程序搭配部署),读写分离技术等。在应用层,本文介绍了一些大型网站常用的技术,以 及选择使用该技术的理由。最后,在架构的高度讨论了网站扩容,容错等问题。\u003c/p\u003e\n\u003cp\u003e本文以理论与实践相结合的形式,结合作者实际工作中得到的经验,具有较广泛的适用性。\u003c/p\u003e\n\u003cp\u003e1 引言\u003c/p\u003e\n\u003cp\u003e1.1 互联网的发展\n最近十 …\u003c/p\u003e"
July 7, 2010
vmstat查看FreeBSD服务器的内存使用情况
"\u003cp\u003e在FreeBSD里运行vmstat命令执行结果如下:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e# vmstat\nprocs memory page disk faults cpu\nr b w avm fre flt re pi po fr sr ad0 in sy cs us sy id\n0 2 1 270512 20316 30 0 0 0 26 5 1223 1589 98 593 1 1 99\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e当然,仅执行一次vmstat命令是无法反映真正的系统情况的。最好使用vmstat t [n]命令,例如 vmstat 5 5,表示在T(5)秒时间内进行N(5)次采样,或者干脆vmstat 1让系统每秒钟执行一次。\u003c/p\u003e\n\u003cp\u003e下面是对各个参数的详细解释\u003c/p\u003e\n\u003cp\u003eprocs:\nr–\u0026gt;在运行的进程数\nb–\u0026gt;在等待io的进程数(等待i/o,paging等等)\nw–\u0026gt;可以进入运行队列但被替换的进程\nmemoy(以k为单位,包括虚拟内存和真实内存,正在运行或最近20秒在运行的进程所用的虚拟内存将被视为active)\navm–\u0026gt;活动的虚拟内存\nfree–\u0026gt;空闲的内存\u003c/p\u003e\n\u003cp\u003epages(统计错误页和活动页,每5秒平均一下,以秒为单位给 …\u003c/p\u003e"
July 7, 2010
linux中查看系统资源占用情况的命令
"\u003cp\u003e\u003cstrong\u003etop:\u003c/strong\u003e\n主要参数\nd:指定更新的间隔,以秒计算。\nq:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。\nc:显示进程完整的路径与名称。\nS:累积模式,会将己完成或消失的子行程的CPU时间累积起来。\ns:安全模式。\ni:不显示任何闲置(Idle)或无用(Zombie)的行程。\nn:显示更新的次数,完成后将会退出to\n显示参数:\nPID(Process ID):进程标示号。\nUSER:进程所有者的用户名。\nPR:进程的优先级别。\nNI:进程的优先级别数值。\nVIRT:进程占用的虚拟内存值。\nRES:进程占用的物理内存值。\nSHR:进程使用的共享内存值。\u003c/p\u003e\n\u003cp\u003eS:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。\n%CPU:该进程占用的CPU使用率。\n%MEM:该进程占用的物理内存和总内存的百分比。\nTIME+:该进程启动后占用的总的CPU时间。\nCommand:进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行。\ntop命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。 …\u003c/p\u003e"
July 7, 2010
freebsd下启动、停止 MySQL命令
"\u003cp\u003e\u003cstrong\u003e启动、停止 MySQL\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e要启动 MySQL 的方法:(以本文将 MySQL 安装在 /usr/local/mysql 为例)\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e# /usr/local/mysql/share/mysql.server start\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e如果安装目录使用的是默认的话,请使用\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e /usr/local/etc/rc.d/mysql-server start|stop|restart\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e注意在第一次执行前,须将 mysql.server 设成可执行(chmod 744 mysql.server),另外可将这行指令加在 /etc/rc.d/rc.local 档中,让 MySQL 在开机时自动启动。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e要停止 MySQL 的方法:\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e# /usr/local/mysql/bin/mysqladmin shutdown\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e如果你为 MySQL Administrator root 帐号(非作业系统的 root)设了密码,要停止 MySQL 则必须像下列这样做,MySQL 会询问你 root 的密码後才会执行 shutdown 的工作:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e# /usr/local/mysql/bin/mysqladmin -u root …\u003c/p\u003e\u003c/blockquote\u003e"
July 6, 2010
提高AJAX客户端响应速度
"\u003cp\u003eAJAX的出现极大的改变了Web应用客户端的操作模 式,它使的用户可以在全心工作时不必频繁的忍受那令人厌恶的页面刷新。理论上AJAX技术在很大的程度上可以减少用户操作的等待时间,同时节约网络上的数 据流量。而然,实际情况却并不总是这样。用户时常会抱怨用了AJAX的系统响应速度反而降低了。\n笔者从事AJAX方面的研发多年,参与开发了目前 国内较为成熟的AJAX平台-dorado。根据笔者的经验,导致这种结果的根本原因并不在AJAX。很多时候系统响应速度的降低都是由不够合理的界面设 计和不够高效的编程习惯造成的。下面我们就来分析几个AJAX开发过程中需要时刻注意的环节。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e合理的使用客户端编程和远程过程调用。\u003c/strong\u003e\n客户端的编程主要都是基于JavaScript的。而JavaScript是一种解释型 的编程语言,它的运行效率相对于Java等都要稍逊一筹。同时JavaScript又是运行在浏览器这样一个严格受限的环境当中。因此开发人员对于哪些逻 辑可以在客户端执行应该有一个清醒的认识。\n在实际的应用中究竟应该怎样使用客户端编程,这依赖于开发人员的经验判断。这里很多问题是只可意会的。 由于篇幅有限,在这 …\u003c/p\u003e"
July 6, 2010
FreeBSD查看即时网络流量
"\u003cp\u003e1、数据包 “netstat 1″一秒钟累计一次,”netstat 2″两秒钟累计一次。依此类推\u003c/p\u003e\n\u003cp\u003e2、查看网 卡流量:”systat -if 1″每秒钟刷新一次,”systat -if 2″两秒钟刷新一次,依此类推\u003c/p\u003e"
July 6, 2010
MySQL压力测试工具 mysqlslap 使用简介
"\u003cp\u003eMySQL从5.1.4版开始带有一个压力测试工具 \u003cstrong\u003emysqlslap\u003c/strong\u003e,通过模拟多个并发客户端访问 mysql来执行测试,使用起来非常的简单。通过mysqlslap –help可以获得可用的选项,这里列一些主要的参数,更详细的说明参考 \u003ca href=\"http://dev.mysql.com/doc/refman/5.1/en/mysqlslap.html\"\u003e官方手册\u003c/a\u003e。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e–auto-generate-sql, -a\u003c/p\u003e\n\u003cp\u003e自动生成测试表和数据\u003c/p\u003e\n\u003cp\u003e–auto-generate-sql-load-type=type\u003c/p\u003e\n\u003cp\u003e测试语句的类型。取值包括:read,key,write,update和mixed(默认)。\u003c/p\u003e\n\u003cp\u003e–number-char-cols=N, -x N\u003c/p\u003e\n\u003cp\u003e自动生成的测试表中包含多少个字符类型的列,默认1\u003c/p\u003e\n\u003cp\u003e–number-int-cols=N, -y N\u003c/p\u003e\n\u003cp\u003e自动生成的测试表中包含多少个数字类型的列,默认1\u003c/p\u003e\n\u003cp\u003e–number-of-queries=N\u003c/p\u003e\n\u003cp\u003e总的测试查询次数(并发客户数×每客户查询次数)\u003c/p\u003e\n\u003cp\u003e–query=name,-q\u003c/p\u003e\n\u003cp\u003e使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。\u003c/p\u003e\n\u003cp\u003e–create-schema\u003c/p\u003e\n\u003cp\u003e测试的schema,MySQL中schema也就是database\u003c/p\u003e\n\u003cp\u003e–commint=N …\u003c/p\u003e\u003c/blockquote\u003e"
July 5, 2010
linux scp 命令
"\u003cp\u003e在 linux 之间复制 文件\u003c/p\u003e\n\u003cp\u003e安装方法:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eyum -y install openssh-clients\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003elinux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录;\u003c/p\u003e\n\u003ch1 id=\"scp-命令\"\u003e==================\n\u003cstrong\u003escp 命令\u003c/strong\u003e\u003c/h1\u003e\n\u003cp\u003escp 可以在 2个 linux 主机间复制文件;\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e命令基本格式:\u003c/strong\u003e\nscp [可选参数] file_source file_target\u003c/p\u003e\n\u003ch1 id=\"从-本地-复制到-远程\"\u003e======\n从 本地 复制到 远程\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e复制文件:\u003c/li\u003e\n\u003cli\u003e命令格式:\nscp local_file remote_username@remote_ip:remote_folder\n或者\nscp local_file remote_username@remote_ip:remote_file\n或者\nscp local_file remote_ip:remote_folder\n或者\nscp local_file remote_ip:remote_file\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;\n第3,4个没有指定用户名,命令执行后需要输入用户名和密码, …\u003c/p\u003e"
July 3, 2010
FreeBSD 修改默认SHELL
"\u003cp\u003eFreeBSD下默认的shell为CSH,可以通过命令 echo $SHELL来查看系统默认的shell是哪一个的。\u003c/p\u003e\n\u003cp\u003e显示自己所使用的SHEEL命令:\nps或echo $SHELL\n修改默认SHELL为csh\nname:是指你登陆的名称\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003epw usermod -n name -s csh\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e查看所有支持的shell\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003efreebsd# cat /etc/shells\n/bin/sh\n/bin/csh\n/bin/tcsh\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e到于bash的安装请参考:\u003c/p\u003e"
July 2, 2010
mysql中的max_connect_errors
"\u003cp\u003e连接mysql server出来这个信息\u003c/p\u003e\n\u003cp\u003e引用\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003emessage from server: “Host ‘HP-2B6E9EC1747B’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts\u0026rsquo;”\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e连接次数失败过多,并超过max_connect_erros的值后,服务器会直接拒绝来源机器的所有连接,只要把mysql server默认 max_connect_errors = 10\n把这个值设置大点就好了,记得一定要执行mysqladmin flush-hosts命令来解锁,原来的主机才可以恢复正常连接的.\u003c/p\u003e"
July 2, 2010
MySQL之Handler_read_*
"\u003cp\u003e在MySQL里,我们一般使用 \u003ca href=\"http://dev.mysql.com/doc/refman/5.0/en/show-status.html\"\u003eSHOW STATUS\u003c/a\u003e 查询服务器状态,语法一般来说如下:\u003c/p\u003e\n\u003cp\u003eSHOW [GLOBAL | SESSION] STATUS [LIKE ‘pattern’ | WHERE expr]\u003c/p\u003e\n\u003cp\u003e执行命令后会看到很多内容,其中有一部分是Handler_read_*,它们显示了数据库处理SELECT查询语句的状态,对于调试SQL语句有很大意 义,可惜实际很多人并不理解它们的实际意义,本文简单介绍一下:\u003c/p\u003e\n\u003cp\u003e为了让介绍更易懂,先建立一个测试用的表:\u003c/p\u003e\n\u003cp\u003eCREATE TABLE IF NOT EXISTS \u003ccode\u003efoo\u003c/code\u003e (\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eid\u003c/code\u003e int(10) unsigned NOT NULL auto_increment,\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ecol1\u003c/code\u003e varchar(10) NOT NULL,\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ecol2\u003c/code\u003e text NOT NULL,\u003c/p\u003e\n\u003cp\u003ePRIMARY KEY (\u003ccode\u003eid\u003c/code\u003e),\u003c/p\u003e\n\u003cp\u003eKEY \u003ccode\u003ecol1\u003c/code\u003e (\u003ccode\u003ecol1\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003e);\u003c/p\u003e\n\u003cp\u003eINSERT INTO `foo` (`id`, `col1`, `col2`) VALUES\n(1, ‘a’, ‘a’),\n(2, ‘b’, ‘b’),\n(3, ‘c’, ‘c’),\n(4, ‘d’, ‘d’), …\u003c/p\u003e"
July 2, 2010
根据status信息对MySQL服务器进行优化[精典]
"\u003cp\u003e对于SQL查询语句对于服务器系统资源的使用情况见:发现瓶颈 – Profiling(程序剖析) -MySQL Profiling\u003c/p\u003e\n\u003cp\u003e网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的 情况进行配置优化,好的做法是MySQL服务器稳定运行了一段时间后运行,根据服务器的”状态”进行优化。\u003c/p\u003e\n\u003cp\u003emysql\u0026gt; show global status;\u003c/p\u003e\n\u003cp\u003e可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句:\u003c/p\u003e\n\u003cp\u003emysql\u0026gt; show variables;\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一、慢查询\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003emysql\u0026gt; show variables like ‘%slow%’;\n+——————+——-+\n| Variable_name | Value |\n+——————+——-+\n| log_slow_queries | ON |\n| slow_launch_time | 2 |\n+——————+——-+\u003c/p\u003e\n\u003cp\u003emysql\u0026gt; show global status like …\u003c/p\u003e"
July 2, 2010
mysql优化的重要参数 key_buffer_size table_cache 分享
"\u003cp\u003eMySQL服务器端的参数有很多,但是对于大多数初学者来说,众多的参数往往使得我们不知所措,但是哪些参数是需要我们调整的,哪些对服务器的性能影响最大呢?对于使用Myisam存储引擎来说,主要有key_buffer_size和table_cache两个参数。对于InnoDB引擎来说主要还是以innodb_开始的参数,也很好辨认。\n查看MySQL参数,可以使用\u003cstrong\u003eshow variables\u003c/strong\u003e和\u003cstrong\u003eshow status\u003c/strong\u003e命令查看,前者查看服务器静态参数,即在数据库启动后不会动态更改的值,比如缓冲区、字符集等。后者查看服务器的动态运行状态信息,即数据库运行期间动态变化的信息,比如锁,当前连接数等。\u003c/p\u003e\n\u003cp\u003ekey_buffer_size这个参数是用来设置索引块(index blocks)缓存的大小,它被所有线程共享,严格说是它决定了数据库索引处理的速度,尤其是索引读的速度。那我们怎么才能知道key_buffer_size的设置是否合理呢,一般可以检查状态值Key_read_requests和Key_reads,比例key_reads / key_read_requests 应该尽可能的低,比 …\u003c/p\u003e"