寻觅生命中的那一片浅草......

文章属于类别 Linux

使用tcmalloc后的MySQL服务器变稳定了

之前,一直困恼很久的MySQL的问题因为有了tcmalloc后得以解决。

问题是:网站访问量不高,高峰时并发数在300-400之间。CPU比较高,在30-80%之间波动得厉害,使用top

命令可以看到是mysql进程导致,同时用iostat和sar查看iowait值很高在20-30之间。

但是系统还可以稳定运行,然后周期性的出现swap分区占用率攀升,直接导致应用程序无法连接数据库。不知道

这是不是mysql的swap颠簸的问题。没 解决办法的时候只好经常监控内存的使用情况,碰到swap开始攀升的时候

重启MySQL服务。一般这个周期在一个星期左右。

后来在网上搜到了tcmalloc,说是这个东西可以让MySQL在高并发下性能也很稳定,同时也说了MySQL这个问题是

因为malloc内存分配函数的bug,这个bug会使高并发的MySQL性能急剧下降。

决定试试。

系统是64位的RedHat Enterprise Linux 5.0 。在64位系统下需要安装另外一个包libunwind。然后下载tcmalloc包,

按默认方式编译和安装成功后在 mysqld_safe 中加入

LD_PRELOAD=”/usr/local/lib/libtcmalloc.so”

重启MySQL。没有办法可以验证tcmalloc是否起效,只能再继续监控系统的运行状况。

经过一个多礼拜了,你可以看看下面一个抓自mrtg的图:

上面两个图中,第一个是CPU的图,第二个是内存的图。可以看出从换上tcmalloc后,CPU占用率下降非常明显,

原来一直维持在30%左右,现在只 占不到10%。而内存方面,原来物理内存一直占用100%,swap占用率波动

得很厉害,下降点一般是重启MySQL后导致的,而换上tcmalloc 后,内存维持在80-90%之间,而swap占用率

就非常稳定,可以按零计。

而且已经持续了一个多礼拜了。可以说效果相当相当的明显,非常令人满意。再也不用老去盯着mrtg看了。

当然这是我的机器上现实的情况,不知道其他系统怎样。

libunwind: http://www.nongnu.org/libunwind/
tcmalloc: http://goog-perftools.sourceforge.net/doc/tcmalloc.html

详细的安装步骤

#tar zxvf libunwind-0.98.6.tar.gz
#cd libunwind-0.98.6
#./configure
#make
#make install

#tar zxvf google-perftools-0.94.1.tar.gz
#cd google*
#./configure
#make
#make install

打开 mysqld_safe 脚本 (默认在/usr/bin/mysqld_safe)
在此脚本文件开始加入
LD_PRELOAD=”/usr/local/lib/libtcmalloc.so”

#service mysql restart

/usr/sbin/lsof -n | grep tcmalloc

转载自:http://www.javayou.com/diary/18368

Nginx配置nginx.conf解释

#user nobody;

worker_processes 10;多少进程

error_log logs/error.log info;记录什么级别的错误日志

pid        logs/nginx.pid; 进程文件

events {
worker_connections 10000; 最大连接就是进程*这个
}

http {
include       mime.types;
default_type application/octet-stream;
log_format   main ‘$remote_addr – $remote_user [$time_local] $status ‘ 这里是日志
‘”$request” $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;

access_log logs/access.log main;
client_header_timeout 3m; 客户端连接上来以后3秒还不发送请求 就断开
client_body_timeout    3m;    同上
send_timeout           3m;
sendfile                on;
tcp_nopush              on;
tcp_nodelay             on;

gzip on;
gzip_min_length 1100; 小于这个就不压了
gzip_buffers     4 8k;
gzip_types       text/* application/x-javascript; 压缩的类型
#output_buffers   1 32k;
output_buffers   1 512k;
gzip_comp_level 9;
postpone_output 1460;

upstream mysvr{#这里定义负载均衡服务器
server 127.0.0.1:8080 weight=1;
}

server {
listen       80;
server_name localhost;

#server_name 192.168.0.253;#写成本机ip就可以

charset utf-8;字符集

access_log logs/host.access.log main;日志

下面一段用于设置nginx的proxy_store:

To be clear proxy_store is not a cache, it’s rather mirror on demand.

To be clear proxy_store is not a cache, it’s rather mirror on demand. 因为没有过期头(expire的概念)

location ~* \.(jpg|gif|png|css|swf|html|htm)$ {

root /var/html/$host;远端被缓存的文件都会被放到这里

proxy_store on;
proxy_set_header Host $host;
proxy_temp_path /web/html/tmp;缓存的tmp目录
proxy_set_header Accept-Encoding ”;
proxy_store_access user:rw group:rw all:rw;权限
if ( !-f $request_filename ) {
proxy_pass http://mysvr;这样只有不存在才回去后端拉
}
}

#      location ~ \ * {
location / {
proxy_pass http://mysvr;
proxy_redirect off;
proxy_store off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 30;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

}
}

location / {
proxy_pass         http://mysvr;   #前面定义的upstream
#        proxy_redirect     off;

proxy_set_header   Host             $host;
proxy_set_header   X-Real-IP        $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     重写http头,没写会导致访问不了

client_max_body_size       10m; #客户端发送的body,在上传附件的时候可能比较大
client_body_buffer_size    128k;

proxy_connect_timeout      90;
proxy_send_timeout         90;
proxy_read_timeout         90;
#        proxy_send_lowat           12000;
proxy_buffer_size          4k;
proxy_buffers              4 32k;
proxy_busy_buffers_size    64k;
proxy_temp_file_write_size 64k;

}
location ~ \.(gif|js|css)$ { #图片,css本地解析
root    /usr/local/tomcat6.bak/webapps/ROOT;
expires 24h;#过期时间
}
location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$
{
access_log off;#图片和css不记录日志

}

location /status {
stub_status            on;
access_log      logs/access-status-ip.log;
auth_basic      “status”;
#auth_basic_user_file conf/user;     设置管理员查看连接情况目录
allow   192.168.0.87;
#         allow   10.1.1.0/16;
deny    all;

}
error_page   500 502 503 504 /50x.html;
location = /50x.html {
root   html;
}
}

}

参考文章:

http://wiki.codemongers.com/NginxFullExample2 威客

http://www.chinaunix.net/jh/13/1319835.html         chinaunix

NginxStatus 显示的内容意思如下:

* active connections – 当前 Nginx 正处理的活动连接数。
* server accepts handled requests — 总共处理了 14553819 个连接 ,

成功创建 14553819 次握手 ( 证明中间没有失败的 ), 总共处理了 19239266 个请求 ( 平均每次握手处理了 1.3 个数据请求 )。
* reading — nginx 读取到客户端的 Header 信息数。
* writing — nginx 返回给客户端的 Header 信息数。
* waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading + writing),

意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接。
* 另外转剑心的关于解析泛域名 说不定哪天用上:
* ++++++++++++++++++++++++++++++++++++++++++++++
*
nginx支持泛域名解析的方法
*
http://bbs.bsdlover.cn/thread-2194-1-1.html
要使用Nginx下的泛域名支持,必须在编译 Nginx的时候加上
–with-http_sub_module
freebsd下ports安装的时候有提示的,选上即可。

方法我google了半天,网上的好多我照做都是不行的,例如这个:
listen    80;
server_name  www.yourdomain.com *.yourdomain.com;
这个会提示:
# nginx -t
2009/01/04 13:22:56 [emerg] 63944#0: conflicting parameter “*.bsdlover.cn” in www.conf:14
2009/01/04 13:22:56 [emerg] 63944#0: the configuration file nginx.conf test failed

还有些文章里面说的是:
server_name   .yourdomain.com;
这个也是不行的,经过我的实验,正确的做法是:
listen    80;
server_name   _;
这样就可以了,留个笔记,呵呵
* ++++++++++++++++++++++++++++++++++++++
* 二级目录自动加 /
* if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
*

*

——————————————————————————————————————

nginx的日志管理:

——————————————————————————————————————

Nginx 支持下表中的信号:

信号名 作用描述
TERM, INT 快速关闭程序,中止当前正在处理的请求
QUIT 处理完当前请求后,关闭程序
HUP 重新加载配置,并开启新的工作进程,关闭就的进程,此操作不会中断请求
USR1 重新打开日志文件,用于切换日志,例如每天生成一个新的日志文件
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程

用logrotate来管理;cat /etc/logrotate.d/nginx:

/usr/local/nginx/logs/*.log {
daily每天滚动
rotate 7保留7份
nocompress不压缩
postrotate在执行完滚动后:
if [ -f /usr/local/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
fi
endscript
}

生效:logrotate -f 这个文件

Monitor设备分组显示

额,下面简单描述一下在monitor插件里将设备分组显示(会的朋友就别看了,别骂我谢谢,只提供给没找到的朋友交流一下,谢谢)
首先分组:在“Managemen”里点“Graph Trees”,再点击“default tree”进去后可以将name修改成你想要的,这个不会在monitor里显示,接下来点击右边的“add”,“Title”里填入你要分的第一个组的名字(支持中文),其他默认,“create”,依此类推,创建所有的组。
再就是在组里添加主机设备,点击已经创建的组名后面的“add”,然后,“Tree Item Type”选择“host”,然后下面就自动列出所有的host主机或者设备,选择一个“create”即可,依此类推。
设置组基本结束,这样monitor里面还是不会以组式显示,点击“configuration”->”Settings”->”Misc”,找到monitor的配置区域(关键就是这里),”Gouping”选择”Tree”,”View”里选择”Title”。保存即可,再去monitor看看,OK了!
希望能帮到大家。

mysql提示符prompt清晰管理数据库

同样的mysql>的提示符有可能会让你输入错误的命令到错误的数据库,这时候需要巧用mysql的提示符,
用prompt命令实现(适用于windows和linux环境)
mysql>prompt \u@\h(\d) \r:\m:\s>
\u:连接用户
\h:连接主机
\d:连接数据库
\r:\m:\s:显示当前时间
mysql>prompt \u@\h(\d) \r:\m:\s>
root@localhost(mysql) 08:55:21> status
————–
mysql Ver 14.14 Distrib 5.1.33, for Win32 (ia32)
Connection id: 2
Current database: mysql
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 5.1.33-community-log MySQL Community Server (GPL)
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: gb2312
Db characterset: gb2312
Client characterset: latin1
Conn. characterset: latin1
TCP port: 3306
Uptime: 6 min 6 sec
Threads: 2 Questions: 867 Slow queries: 0 Opens: 129 Flush tables: 1 Open t
ables: 9 Queries per second avg: 2.368
————–
root@localhost(mysql) 08:55:29>

转载自:http://blog.chinaunix.net/u/20483/showart.php?id=2025942

Linux服务优化详解

Fedota 7的新功能Fedora – Fast User Switchin,如果你想要使用这个新功能就开着,反之关掉吧。

NetworkManager, NetworkManagerDispatcher
自动在多种网络连接中进行转换,如果你的电脑有Wireless WiFi 和 Ethernet,开着它吧,Fedora能自动为你选择最好的可用连接。像我这样
只用一个网络连接设置的,还是关掉吧。

anacron, atd, crond
这是一些调试程序的后台服务,一般的桌面用户可以把anacron, atd关了,如果你打算常时间开机,那就把crond打开。 建议始终把crond开着。

auditd
用于存放内核生成的系统审查记录,这些记录会被一些程序使用。特别是对于SELinux用户来说,还是开着吧。

autofs
自动挂在移动硬盘,没什么说的,开着。

avahi-daemon, avahi-dnsconfd
主要用于Zero Configuration Networking ,关吧,一般无用。

bluetooth, hcid, hidd, sdpd, dund, pand
蓝牙相关,无蓝牙者,关关关。

btseed, bttrack
BT相关,无法用BT的,可以关了

capi
ISDN硬件支持,大部分用户可以关了

cpuspeed
CPU速度调整,如果你用的是Pentium-M, Centrino, AMD PowerNow, Transmetta, Intel SpeedStep, Athlon-64, Athlon-X2, Intel Core 2
开着吧;如果不是还是关了吧,开着也无用。

cupsd
CUPS打印机支持,没有打印机或者是其他类型打印机的,可以关了

dhcdbd
D-BUS系统网络接口,主要为你提供网络连接设置,强烈建议开着,除非你用固定IP上网。

firstboot
Fedora安装完之后的那个用户向导,一般可以关了

gpm
Text console(CTRL-ALT-F1,F2..)鼠标支持,如果你不经常用Text console,可以关了

haldaemon
HAL(Hardware Abstraction Layer)服务,开着吧

hplip, hpiod, hpssd
HPLIP打印机支持,如果你有开着吧。

httpd
Apache HTTP网页服务器, 如果你不开发网页,关吧

ip6tables
如果你不用 IPv6,关了

iptables
防火墙,没什么说的,开着

irda
红外线设备支持,无者关

irqbalance
多核CPU支持, 无着关

isdn
ISDN modem支持, 无者关

jexec
如果你安装java 1.6 就会有这个,让你可以双击运行 *.jar 文件。不想要就关

kudzu
Fedora硬盘侦测服务,当你更换或添加硬盘的时候可以使用,平时可以关了

lirc
红外线遥控器支持, 无者关

mcstrans
主要用于SELinux,如果你不用SELinux,可以关了

mdmonitor
RAID支持, 无者关

messagebus
Linux ICP 服务, 强列建议开着。

netfs
如果你需要网络共享文件,那就开着

netplugd
对大部分用户基本无用,关

network
没什么说的。开着;除非你不上网

nfs, nfslock
文件共享支持,不需要的可以关了

nscd
NIS, NIS+, LDAP, or hesiod服务密码控制, 没有这些服务的可以关了

ntpd
网络时间同步,和windows的那个差不多,不需要的可以关了

nvidia-96XX 或者 nvidia-97XX
livna的nvidia显卡驱动,开

pcscd
智能卡支持,无者关

readahead_early, readahead_later
开机内存载入优化, 开着吧

restorecond
SELinux用于监控文件, 不用SELinux的可以关了

rpcbind
RPC服务,一般可以关闭

rpcgssd, rpcidmapd, rpcsvcgssd
NFS支持,不用NFS的可以关闭

sendmail
邮件传送代理,如果你用Webmail 或者 Thunderbird, Kmail之类的来收发邮件。可以关了

setroubleshoot
SELinux Troubleshooting, 不用SELinux的可以关了

smartd
SMART Disk Monitoring, 快速开机自检,开着吧

smolt
无用,关吧

sshd
OpenSSH服务器,通常可以关了,这是服务器端,关闭不影响ssh的使用

syslog
系统日志,开着吧

vncserver
一般桌面用户可以关了

winbind
不用Samba服务器的话, 可以关了

wpa_supplicant
无线设备支持,无者关

ypbind
不用NIS/YP,可以关了

yum-update
自动定期升级检测, 如果你经常手动升级。可以关了

转载自:http://blog.freebug.org/archives/16.html

2025年十一月
« 5月    
 12
3456789
10111213141516
17181920212223
24252627282930