fedora 29 coredump

Publish: February 2, 2019 Category: Shell No Comments

    使用以下命令使core文件在当前目录:

$ sysctl -w kernel.core_pattern=core


巧用lsof查找消失的空间

Publish: January 18, 2019 Category: Shell No Comments

    今天遇到个奇怪的事情,使用df -h命令的时候,发现var满了,190G全满了。

[root@xxxxxx]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              16G  635M   15G   5% /
tmpfs                  16G     0   16G   0% /dev/shm
/dev/sda7             570G  154G  387G  29% /data1
/dev/sda6              16G  173M   15G   2% /tmp
/dev/sda5              20G  6.1G   13G  33% /usr
/dev/sda3             197G   15G  173G   8% /var

然后使用 du -sh 去查var下面哪个目录,发现var只用了15G,找不到使用者,如下

[root@xxxxxx]# du -sh /var/*
4.0K    /var/account
141M    /var/cache
93M     /var/cfengine
4.0K    /var/crash
4.0K    /var/cvs
104K    /var/db
8.0K    /var/empty
4.0K    /var/games
95M     /var/lib
4.0K    /var/local
16K     /var/lock
15G     /var/log
20K     /var/lost+found

[root@xxxxxx]# du -sh /var/
15G     /var/

奇怪了吧,最后刚上查了下,发现可能有文件已经删除,但进程还在使用,就使用如下命令

[root@xxxxxx]# lsof |grep deleted
php         525     root    5uW     REG                8,3          0    9365330 /var/tmp/sqlite_hrggjoghXxuVeNw (deleted)
php         525     root    8u      REG                8,3         20    9365331 /var/tmp/sqlite_hrggjoghXxuVeNw-journal (deleted)
crond      2008     root    3u      REG                8,3          5    3767505 /var/run/crond.pid (deleted)
python    30172     root   10u      REG                8,6       4096         21 /tmp/ffi6zRKh3 (deleted)
python    30175     root   10u      REG                8,6       4096         22 /tmp/ffie68Mj3 (deleted)

最后杀掉进程即可~。




inetd,xinetd守护进程

Publish: August 31, 2017 Category: Shell,C/C++ No Comments

    inetd, xinetd 为每一个服务都建立侦听socket,当inetd,xinetd收到连接时,它首先确定该socket协议和端口所对应的服务程序,然后fork子进程来启动exec该服务程序,并把连接的通信socket描述符作为标准输入、标准输出和标准错误输出描述符传递给子进程。

    这种方式,不但不需要为每个服务启动独立的服务程序,而且在设计这些服务程序时,还可以避免考虑复杂的socket编程,所需的仅仅是简单的字符串分析。比如telnet、ftp等,都是通过 inetd, xinetd 守护进程来实现的。


xinetd:

  1. 设置文件: /etc/services

# 在文件尾添加一行:
sj    20227/tcp

此文件记录了 xinetd 守护的每个服务的基本信息,包括名称、端口号和协议类型。此例添加了服务 sj 占用TCP协议的20227端口。


  2. 设置文件: /etc/xinetd.d/sj

service sj
{
    socket_type = stream
    protocol    = tcp 
    wait        = no
    user        = root
    only_from   = 198.72.5.0 localhost  
    banner      = /usr/home/grayson/deny_banner
    server      = /usr/home/grayson/sj_server
}

这是一个常见的服务配置文件。我们逐行看一下:

  • 第一行指定这是一个服务并给服务取一个名称。

  • socket_type 描述连接如何工作,常常是 stream(用于 TCP 连接)或 dgram(用于 UDP 服务)。

  • wait 控制 xinetd 是每次处理一个连接 (wait=yes),还是每次处理多个连接 (wait=no)。

  • user 指定守护进程应该作为哪个用户运行。这个用户常常是根用户(超级用户),但是某些服务最好或必须作为服务的创建者运行。

  • only_from 指定哪些系统可以对这个服务发出请求。在这里,只允许 198.72.5 子网上的系统和本地主机使用 sj 服务。最右边的 0 作为通配符;允许 IP 地址前缀为 198.72.5 的任何系统请求服务。可以使用多种表示法指定系统;详情参见 xinetd.conf 手册页。(输入 man 5 xinetd.conf。)如果允许所有就去掉这行!

  • 如果禁止访问,就把 /usr/local/etc/deny_banner 文件的内容发送给客户机。

  • 最后,server 指定允许访问时运行的可执行程序。


  3. 重启服务:

service xinetd restart

    

  4. 服务: sj_server

#include <stdio.h>
int main()
{
    char buf[1024] = {0};
    printf("Welcome!\n");
    fflush(stdout);
    while (1) {
        fgets(buf, sizeof(buf), stdin);     // 读取请求
        printf("Input: %s", buf);           // 返回应答
        fflush(stdout);
        if (strncmp(buf, "exit", 4) == 0)
            break;
    }
    return 0;
}

  5. 编译

# gcc -g -o sj_server sj_server.c


CentOS一键升级内核并开启Google BBR

Publish: April 21, 2017 Category: Shell No Comments

Google BBR是一款TCP加速工具,类似与锐速,Google开源了BBR 拥塞控制算法,并提交到了 Linux 内核,最新的 4.9 版内核已经用上了该算法。因此要想使用BBR,必须升级到最新内核。


查看架构

OpenVZ虚拟化不支持单独升级内核,因此可以直接放弃。KVM、XEN等虚拟化一般是支持的。CentOS执行下面的命令可以查看当前使用的虚拟化技术,详细说明请参考:

#安装virt-whatyum 
install virt-what

#查看架构
virt-what

升级内核并开启BBR

依次执行下面的命令升级内核并开启BBR,执行完毕后需重启服务器,若内核升级失败导致系统无法启动,可以参考《CentOS 6修改启动内核》处理,升级前重要数据请做好备份,勿在生产环境测试。

#分别执行下面的命令升级内核
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
chmod +x bbr.sh
./bbr.sh

查看

#查看内核版本,一般返回4.9
uname -r

#执行下面命令,一般返回net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_available_congestion_control

#下面命令一般返回net.ipv4.tcp_congestion_control = bbr
sysctl net.ipv4.tcp_congestion_control

#下面命令一般返回net.core.default_qdisc = fq
sysctl net.core.default_qdisc

#返回值有 tcp_bbr 模块,说明BBR已启动

其它说明

一键脚本在Vultr测试通过,该脚本还适用于Debian 7+,Ubuntu 12+,具体请自行尝试。配合秋水逸冰的另一脚本CentOS一键安装shadowsocks脚本效果更佳。


本文引用: CentOS一键升级内核并开启Google BBR

SSR 服务器端安装(单用户版)

Publish: November 7, 2016 Category: Shell,C/C++ No Comments

基本库安装

centos:

yum install python-setuptools && easy_install pip
yum install git

ubuntu/debian:

apt-get install python-pip
apt-get install git

获取源代码

git clone -b manyuser https://github.com/breakwa11/shadowsocks.git

执行完毕后此目录会新建一个shadowsocks目录,基本根目录的是多用户版(即数据库版),子目录中的是单用户版

  • 根目录即: ./shadowsocks

  • 子目录即: ./shadowsocks/shadowsocks


服务端配置

添加用户配置文件: /etc/shadowsocks-rss/user-config.json

{
    "server": "0.0.0.0",
    "server_ipv6": "::",
    "server_port": 8388,
    "local_address": "127.0.0.1",
    "local_port": 1080,
    "password": "123qwe",
    "timeout": 120,
    "udp_timeout": 60,
    "method": "aes-256-cfb",
    "protocol": "origin",
    "protocol_param": "",
    "obfs": "http_simple_compatible",
    "obfs_param": "",
    "dns_ipv6": false,
    "connect_verbose_info": 0,
    "redirect": "",
    "fast_open": false
}

启动 (一定要先进入单用户版本)

# cd shadowsocks/shadowsocks
# python server.py -c /etc/shadowsocks-rss/user-config.json