Debian 生成新的交换分区

先看我在推特上的这条吐槽:

https://twitter.com/kelvinbloodzz/status/881719864989065217

嘛,事情是这样的。 我在阿里云的机器上编译 PHP,编译到中途就报了错误——内存不足。于是就纳闷了,这问题咋解决啊,难道要我换台机器?虚拟内存在哪呢?然后就是这样了:

才知道原来阿里云没有为我们默认创建交换分区。这个,算是个坑吧。

所以下面来看怎么添加交换分区。

给linux增加swap主要有两种方法,1是增加swap文件,2是增加swap分区。

在你有单独硬盘可以挂载的时候,才可以用第二种方式。具体根据你的环境操作来选吧。

增加 swap 文件

  • free查看系统内存及交换分区的使用率

      用法:free  -m   #以兆为单位查看
      free –m
    
  • 使用虚拟设备生成空文件

      dd  if=/dev/zero  of=目录/文件名  bs=容量  count=次数
      dd  if=/dev/zero of=/swapfile bs=100M count=10  #表示增加1G虚拟内存
    
  • 生成交换分区文件

      mkswap  /swapfile 
    
  • 激活交换分区

      swapon /swapfile
      swapon -s //检查是否生效
    
  • 交换分区永久生效

    在文件/etc/rc.local中添加一行

      swapon   /swapfile    #重启系统生效
    

如果要去掉这个新的交换分区,用如下命令:

/sbin/swapoff   /swapfile 

增加 swap 分区

增加 swap 分区

  • 设置分区

      mkswap  /dev/sdc
    
  • 激活分区

      swapon /dev/sdc
      swapon -s //检查是否生效
    
  • 交换分区永久生效

      echo /dev/sdc swap swap defaults 0 0  >> /etc/fstab //将/dev/sdc自动挂载成Swap写入fstab文件里
    

常见错误

  1. 在 openvz 的机器中,你可能会遇到这样一个错误:

     swapon: /swapfile: swapon failed: Operation not permitted
    

    对于这个问题我还没有好的解决办法,如果你有解决办法的话欢迎和我联系。

参考资料


PHP模块加载失败

当我们编译好 php 后,启动 php-fpm 时会出现这样一系列的模块加载失败的错误:

NOTICE: PHP message: PHP Warning:  Module 'bcmath' already loaded in Unknown on line 0
NOTICE: PHP message: PHP Warning:  Module 'curl' already loaded in Unknown on line 0
...

如图:

或者是查看 php 版本时,php -v 也会出现这样的错误。

PHP有两种方式添加扩展模块, 一种是直接编译进了PHP,另外一种是通过共享模式添加模块,并在php.ini配置文件中配置相应的模块。 在编译时的区别如下:

以下是直接编进内核的示例:

./configure --prefix /usr/share/php7  \
    --enable-mbstring \
    --with-bz2 \
    --with-curl \
    --with-xsl

以下是共享模式添加的示例:

./configure --prefix /usr/share/php7  \
    --enable-mbstring \
    --with-bz2=share \
    --with-curl=share \
    --with-xsl

以上问题出现的原因是我们需要的模块已经编译进PHP了,但是我们通过共享模块再次加载了这些模块,这样就导致重复加载。

解决方案:修改php.ini配置文件,注释掉相应的模块配置

;extension=pcre.so
;extension=spl.so
;extension=simplexml.so
;extension=session.so
;extension=exif.so

参考资料

参考资料


nginx 413 Request Entity Too Large 错误解决方法

今天在网站上传文件时,出现这个错误

413 Request Entity Too Large 

解决办法是打开nginx主配置文件nginx.conf,找到http{}段,修改或者添加下面的字段

client_max_body_size 30m;

然后重启nginx

./reload.sh

顺便贴一下我的 nginx.conf 配置文件的 http 设置。

http {
    access_log off;
    log_format default_format '$time_iso8601|$remote_addr|$request_method|$status|$request_length|$request_time|$http_referer|$http_user_agent|$request_uri';

    fastcgi_cache_path /var/local/nginx/fastcgi_cache/one_hour keys_zone=fastcgi_1h:16m levels=1:2 inactive=1h max_size=1g;

    limit_conn_zone $binary_remote_addr zone=conn_perip:16m;
    limit_req_zone $binary_remote_addr zone=req_perip:16m rate=2r/s;

    limit_rate_after 2048k;
    limit_rate  512k;

    client_header_timeout 8s;
    client_body_timeout 8s;
    client_max_body_size 32m;

    server_names_hash_bucket_size 64;

    gzip on;
    gzip_min_length 16384;
    gzip_types text/javascript text/css text/xml text/plain application/json application/x-javascript application/xml;

    include       mime.types;
    sendfile      on;

    keepalive_timeout  30 30;

    upstream services {
        server localhost:8090;

        keepalive  16;
    }

    include vhost/*.conf;
}

Mac 下 MySQL 安装以及 phpmyadmin 配置

MySQL 安装

安装 MySQL 有很多种方式,包括 源代码安装、homebrew安装、还有直接下载dmg安装包安装。

一切从简把,直接在官网上下载 dmg 文件,双击安装。https://dev.mysql.com/downloads/mysql/

一路无脑安装即可。在系统偏好里开启。 一般还是不要开机自启动,因为 mysql 比较耗内存,像我这的 air 就比较吃力了。

phpmyadmin 配置

phpMyAdmin. 由php开发的一个 MySQL 管理工具。在官网上下载源代码:https://www.phpmyadmin.net/downloads/

下载到本地后把文件 「config.sample.inc.php」 拷贝一份,重命名为 「config.inc.php」

找到这一行:

$cfg['Servers'][$i]['host'] = 'localhost';

改为:

$cfg['Servers'][$i]['host'] = '127.0.0.1';

配置好 nginx/apache,就能够跑起来了。 我用的是 IDEA 自带的配置,就不那么费神了。下面是IDEA中的配置方法,可以做个参考。


阿里云服务器的安全组设置小坑

阿里云的活动不断,几乎任何时间都能看到他们在搞活动。最近阿里云国际正在搞『SSD云服务器爆款低至1.6折,年付30美元,月送1TB流量包!』 的活动, 顺手入了一台美西硅谷服务器。按照我以往使用阿里云的经验,买完之后就开箱即用了。按照惯例运行好服务器运维的脚本,陆续开启各种服务了。

让我意外的是在其他服务器上可以使用的一些自定义接口,阿里云上始终没法连接上。

一开始也没有多想,以为是自己哪里没配置好。毕竟脚本也是边写边改的,出现问题也正常。安装几次还是不成功。谷歌之后终于有了方向——还有个安全组策略 ——前几天介绍的idcf 也是如此。然而不一样的是,idcf 是完全没有配置任何东西,所以一开始连 ssh 都是没办法连上的。

相比之下阿里云的防火墙策略就『智能』了很多——ssh 和 80 端口都给你开了,偏偏就是不给你开其他端口,让你连不上的时候干着急 Orz = =。

于是问题解决,修改安全组里的规则即可。入口和出口都要设置: