日志分类:Linux

How to kill an `uninterruptible sleep` process

2010-05-18 20:49  |  分类:Linux

很早之前就遇到一次这个故障,当时是一台主机故障,这次是上百台主机故障。当时是使用mysqldump向NFS备份时,写数据时大概是NFS出现故障,使得mysqldump进程进入uninterruptible sleep(man ps)状态:

$ps axu|grep mysqldump
mysql 2718 0.0 0.0 51088 672 pts/0 S+ 13:30 0:00 grep mysqldump
mysql 14916 1.4 0.0 0 0 ? D 02:03 10:03 [mysqldump]

进入该状态的进程,会一直等待NFS,不接受任何信号,当然也就无法被杀死(kill/fuser -k)。因为进程一直在运行队列(running queue)中,所以还会导致主机的Load上升(虽然主机并不繁忙)。如果由于这个原因被卡住的进程很多的话,主机的Load可能会看起来非常高。 全文阅读 »

Vim使用简介

2010-03-7 22:35  |  分类:Linux

        "工欲善其事,必先利其器"
                                   《论语》

写在前头:vim是Linux下最常用的编辑工具,一般认为vim是Vi IMproved(增强的vi)的缩写,很多时候我们也把vim称为vi。vi是一个上手比较难,但是一旦掌握,就能大大提高效率的工具。本文介绍一些Vim使用的基本概念,读者可以根据本文给出参考文献继续深入了解Vim。

1. 认识Vi

直接使用vi(或者vim)命令,有时会看到如下的内容

Vim is open source and freely distributable ~ Help poor children in Uganda! ~ type :help iccf<Enter> for information

全文阅读 »

Linux iostat监测IO状态

2010-03-1 13:13  |  分类:Linux,技术细节

Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。其中iostat可以给我们提供丰富的IO状态数据。

1. 基本使用

$iostat -d -k 1 10

参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 10表示,数据显示每隔1秒刷新一次,共显示10次。 全文阅读 »

Linux本地磁盘(硬盘)介绍

2010-02-24 20:05  |  分类:Linux,技术细节

本文试图从硬件结构、逻辑结构两方面来介绍Linux中本地磁盘的基本知识。

1. 硬件结构

一块磁盘由多个盘面组成,每个盘面有一个对应的磁头(heads),我们可以在该盘面上存储我们需要的信息。

每一个盘面,被分成多个圆环,我们称之为柱面(cylinders)。每一个柱面又被分割为多个扇形区域,简称扇区(sectors),参见下图:

磁盘扇区(图片来源www.eygle.com/

两个红色环形之间是一个柱面;图中黄色标记部分是一个扇区。 全文阅读 »

Linux下C语言连接MySQL

2010-01-26 19:21  |  分类:Linux,MySQL,技术细节

相对于Window下的设置,Linux要简单的很多。

1. 示例程序

$ vi mysql-c-api.c #include <stdio.h> #include "mysql/mysql.h" int main(){ MYSQL mysql; mysql_init(&mysql); mysql_options(&mysql,MYSQL_OPT_COMPRESS,0); mysql_options(&mysql,MYSQL_INIT_COMMAND,"SET autocommit=0"); if (!mysql_real_connect(&mysql,"10.2.3.4","user","passwd","database",0,NULL,0)) { fprintf(stderr, "Failed to connect to database: Error: %sn", mysql_error(&mysql)); } return 0; }

2. 编译命令

在MySQL编译后的二进制文件中,有一个很有用的二进制文件“mysql_config”(一般和mysql命令在同一个目录下),我们可以通过这个程序找到需要的头文件和连接库:

$ gcc -o a.out $(mysql_config --cflags) mysql-c-api.c $(mysql_config --libs) $ ./a.out

迥异的Linux Shell Script

2009-09-17 15:44  |  分类:Linux,技术细节

作者:mail
摘要:如果你已经习惯编写Shell脚本,那么一切都显得很自然了。但像我这样,之前已经习惯了C语言(风格)的编程,就觉得Shell并不是那么友好。这里将记录一些Shell和”C风格”迥异的地方,以供参考。本文测试环境:GNU bash, version 3.00.15(1)-release (i386-redhat-linux-gnu)。文章中很多实例直接来在参考文件[1]、[2]。

Linux

全文阅读 »