linux系统性能优化及瓶颈分析标准参考

部分参考 高俊峰 高性能linux服务器构建架构一书 及linuxtone  整理

在这里不想用一些抽象的概念去说明问题,只是用通俗的语言尽量准确的表达我的想法。优化,为什么要优化?你说一个系统需要优化,那你衡量的标准是什么?无非两个方面,

(1)响应时间,具体说就是用户发出请求到收到响应的时间间隔。如果目前你的用户没有感觉响应时间长,那就不要给你自己找事了。
(2)吞吐量,就是单位时间内完成的用户或系统的请求数量。但有时候这两点是矛盾的,你得做出平衡。让这两点达到一个合理的范围。
确定了优化的目标,那就该为达到目标寻求达到目标的路径。就本人5年的Java的开发经验以及系统管理的经验来说,从下面两个方面的优化去达到我们的目标:

一,系统级优化
系统级优化是不是感觉太大了,说白了就是系统资源的分配,系统资源就是CPU,内存,存储(I/O),网络和串行通信。

二,应用级优化
应用级优化就是应用程序的架构设计,程序逻辑是否发挥了系统的优势。
优化,说到底就是跑在系统上的应用是否高效的利用了系统资源。要知道,既然要优化,就必须要调试,因此在调试的同时,调试工具本身也会对系统的性能有影响,所以在做性能分析与调试的时候要使用多种工具去分析资源的瓶颈,而且,性能优化不存在唯一值或者最优值。
性能分析调试的原则:
1,如果你不懂,不要对系统的参数进行随意的改动。
2,每次只对一种系统资源进行系统调试。
3,每次改动尽量少的参数设置,推荐每次修改一个设置。
4,分析一项系统资源时,使用多种工具。
5,不及胜于过之。

OK,概述的话就这些了,有不当之处,多多指教。

系统性能分析标准 经验 阅读全文

amoeba-mysql的安装使用和读写分离

amoeba真的是不错的稳定而灵活的数据库解决方案,阿里巴巴的技术陈思儒开始的一个开源项目,它是分布式数据库Proxy解决方案。

About Amoeba

引用
Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户
端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请
求多台数据库合并结果。
主要解决:
* 降低 数据切分带来的复杂多数据库结构
* 提供切分规则并降低 数据切分规则 给应用带来的影响
* 降低db 与客户端的连接数
* 读写分离
* 制定一种规则可支持DB线性扩容目前在amoeba 框架上面已经实现了 amoeba for mysql.

找寻到amoeba是出于想要做读写分离,目前可以有三种解决方式:

1 程序修改mysql操作类
可以参考PHP实现的Mysql读写分离,阿权开始的本项目,以php程序解决此需求。
优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配
缺点:自己维护更新,增减服务器在代码处理

2 amoeba
参考官网:http://amoeba.meidusa.com/
优点:直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案
缺点:自己分配账户,和后端数据库权限管理独立,权限处理不够灵活

3 mysql-proxy
参考 mysql-proxy
优点:直接实现读写分离和负载均衡,不用修改代码,master和slave用一样的帐号
缺点:字符集问题,lua语言编程,还只是alpha版本,时间消耗有点高

如果你不能安装软件来解决读写分离,那可以尝试阿权的项目解决思路。
如果你可以安装软件,那amoeba是不错的,mysql-proxy不太建议,目前只有alpha版本,效率还不太理想,amoeba目前在阿里巴巴是内部项目,正在生产环境使用的。

amoeba的安装使用
阅读全文

puppet介绍及配置文件目录结构

1. 概述

puppet是一个开源的软件自动化配置和部署工具,它使用简单且功能强大,正得到了越来越多地关注,现在很多大型IT公司均在使用puppet对集群中的软件进行管理和部署,如google利用puppet管理超过6000台地mac桌面电脑(2007年数据)。

本文主要介绍puppet安装方法,设计架构及使用方法。

2. 设计架构

puppet是基于c/s架构的。服务器端保存着所有对客户端服务器的配置代码,在puppet里面叫做manifest. 客户端下载manifest之后,可以根据manifest对服务器进行配置,例如软件包管理,用户管理和文件管理等等。

阅读全文

Ubuntu 11.10 配置vnc并自动启动

在缺省安装的情况下,ubuntu11.10使用的桌面是ubuntu-desktop   unity;
先说说win 下要做的设置:
win 下其实很简单,到vncviewer去下载个客户端就OK了,很小的一个exe文件,直接执行,下载地址:

http://www.realvnc.com/products/free/4.1/winvncviewer.html

ubuntu vncserver :
其实ubuntu 11.10 里面已经安装了 桌面共享 ,用的是 vino-server ,这个东西好是好,就是有个很不爽的缺点:必须要在ubuntu主机上登录过后才能在win 下用vncviewer登录。并且好像登录过后锁定或者注销都不能正常使用。
试过 vnc4server、tightvncserver、都有一些问题。最后使用了 x11vnc,一段配置下来,重启机器,OK。很爽,下面是步骤:
1、安装x11vnc

sudo apt-get install vino vinagre x11vnc 阅读全文

Python脚本直解!

 

 

草译

coffeeghost-q-in-py.png
中文图

Mysql 分库分表

  数据库的复制能解决访问问题,并不能解决大规模的并发写入问题,要解决这个问题就要考虑mysql数据切分了

数据切分,顾名思义,就是数据分散,将一台主机上的数据分摊到多台,减轻单台主机的负载压力,有两种切分方式,一种是分库,即按照业务模块分多个库,每个库中的表不一样,还有一种就是分表,按照一定的业务规则或者逻辑将数据拆分到不同的主机上,每个主机上的表是一样的,这个有点类似于Oracle的表分区。

分库又叫垂直分区,这种方式实现起来比较简单,重要的是对业务要细化,分库时候要想清楚各个模块业务之间的交互情况,避免将来写程序时出现过多的跨库操作。
阅读全文

PHP 命令行工具 shell_exec, exec, passthru, system

PHP 为执行外部命令提供大量函数,其中包括 shell_exec()exec()passthru() 和 system()。这些命令是相似的,但为您运行的外部程序提供不同的界面。所有这些命令都衍生一个子进程,用于运行您指定的命令或脚本,并且每个子进程会在命令输出写到标准输出 (stdout) 时捕捉它们。

shell_exec()

shell_exec() 命令行实际上仅是反撇号 (`) 操作符的变体。如果您编写过 shell 或 Perl 脚本,您就知道可以在反撇号操作符内部捕捉其他命令的输出。例如,清单 1 显示了如何使用反撇号在当前目录中获取每个文本(.txt)的单词计数。

清单 1. 使用反撇号计算单词数量

#! /bin/sh
number_of_words=`wc -w *.txt`
echo $number_of_words

#result would be something like:
#165 readme.txt 388 results.txt 588 summary.txt
#and so on….

在您的 PHP 脚本中,您可以在 shell_exec() 中运行这个简单的命令,如清单 2 所示,并获取想要的结果。这里假设在同一个目录下有一些文本文件。

清单 2. 在 shell_exec() 中运行相同的命令

<?php
$results = shell_exec(‘wc -w *.txt’);
echo $results;
?>

在图 1 中可以看到,获得的结果与从 shell 脚本得到的一样。这是因为 shell_exec() 允许您通过 shell 运行外部程序,然后以字符串的形式返回结果。 阅读全文

全虚拟化、半虚拟化、硬件辅助虚拟化的差别

系统虚拟化不仅仅包括全虚拟化半虚拟化硬件辅助虚拟化。完整来看,可以将系统虚拟化分为五大类:

硬件仿真(Emulation)

简介:属于Hosted模式,在物理机的操作系统上创建一个模拟硬件的程序(Hardware VM)来仿真所想要的硬件,并在此程序上跑虚拟机,而且虚拟机内部的客户操作系统(Guest OS)无需修改。知名的产品有Bochs,QEMU和微软的Virtual PC(它还使用少量的全虚拟化技术)


图1. 硬件仿真架构图

· 优点:Guest OS无需修改,而且非常适合用于操作系统开发,也利于进行固件和硬件的协作开发。固件开发人员可以使用目标硬件 VM 在仿真环境中对自己的实际代码进行验证,而不需要等到硬件实际可用的时候。

· 缺点:速度非常慢,有时速度比物理情况慢100倍以上。

· 未来:因为速度的问题,渐趋颓势,但是还应该有一席之地。

全虚拟化(Full Virtulization) 阅读全文

CentOS5环境下布署LVS+keepalived

#!/bin/bash
# BY kerryhu
# MAIL:king_819@163.com
# BLOG:http://kerry.blog.51cto.com
# Please manual operation yum of before Operation…..
系统环境`:CentOS 5.5(定制安装)
组件:
Base
Development Libraries
Development Tools
Editors
Text-based Internet

lvs-master:192.168.9.201
lvs-backup:192.168.9.202
vip:192.168.9.200
web1:192.168.9.203
web2:192.168.9.204
netmask:255.255.255.0
gateway:192.168.9.1

网络拓扑: 阅读全文

CentOS搭建SVN(CollabNet Subversion Edge)服务器

系统版本:CentOS 5.7X64

#下载SVN服务器(CollabNet Subversion)
下载CollabNet Subversion,到这个网址去下载最新版本:
http://www.open.collab.net/cn/downloads/subversion/redhat.html


安装CollabNet Subversion之前必须先安装JDK1.6和python2.4 ~ 2.6。

#JDK1.6的安装

  1. cd /opt
  2. mv jdk-6u29-linux-x64.bin /usr/local/
  3. ./jdk-6u29-linux-x64.bin

#设置环境变量

  1. cat >>/etc/profile<<EOF
  2. export JAVA_HOME=/usr/local/jdk1.6.0_29
  3. export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  4. export PATH=$PATH:$JAVA_HOME/bin
  5. EOF

source /etc/profile 阅读全文