Ubuntu 14.04上的Apache服务器限制单个用户的下载带宽

今天突然发现自己的服务器访问异常缓慢,从阿里云的监控平台上看到,CPU的利用率并不高,但是带宽却已经被吃满了,导致网站访问异常缓慢,跟踪了一下发现是某个用户下载网站上的大文件导致了带宽吃紧的情况。因此需要限制某个用户的独占带宽。

具体操作


1.安装带宽限制模块

$ sudo apt-get install libapache2-mod-bw

2.启用模块

$ a2enmod bw

3.配置网站对于带宽的限制规则

$ sudo vim /etc/apache2/sites-enabled/000-default.conf

在原有的

<VirtualHost *:80>
...................
...................
</VirtualHost>

之间增加如下内容

# activate bandwidth limitation
BandwidthModule On
ForceBandWidthModule On
# * 表示文件类型,所有大于1000k的文件下载速度100k , 这里我当时以为两个单位一样的。。。
LargeFileLimit * 1000 100000
# 不限制单个用户的带宽占用
BandWidth all 0
# 每个IP地址建立的最大连接数量,由于NAT上网的存在,多用户可能同一个外网IP,因此这个数字不可太小
MaxConnection all 120

然后重启Apache2.

$ sudo service apache2 restart

注意,如果配置了HTTPS,那么对应的配置文件也需要调整。

参考链接


Ubuntu 14.04检查是谁占用了带宽

今天突然发现自己的服务器访问异常缓慢,从阿里云的监控平台上看到,CPU的利用率并不高,但是带宽却已经被吃满了,导致网站访问异常缓慢,于是想看看究竟是哪个连接导致的,网上搜索了一下,找到iftop工具。
安装如下:

$ sudo apt-get install iftop

阿里云的ECS服务器上,外网网卡默认是eth1,因此执行如下命令:

$ sudo iftop -i eth1

可以看看是哪些连接长时间占用了带宽,然后去Apache2的访问日志中对应看看IP地址在访问哪些文件就知道具体情况了。

下面是原文照抄

利用iftop找出是谁占用了带宽

有时候我们的网络缓慢并不是由远程服务器或路由器所引起,而只是因为系统中的某些进程占用了太多可用带宽。虽然从直观角度我们很难确定哪些进程正在使用带宽,但也有一些工具能帮大家把这些捣蛋的家伙揪出来。

top就是这样一款出色的故障排查工具,它的出现还带来一系列思路相似的衍生品,例如iotop--能够确定到底是哪些进程占用了大部分磁盘I/O性能。最终名为iftop的工具横空出世,能够在网络连接领域提供同等功能。与top不同,iftop不会亲自关注进程情况,而是列出用户服务器与远程IP之间占用带宽最多的连接对象。举例来说,我们可以在iftop中快速查看备份服务器IP地址在输出结果中的位置来判断备份工作有没有大量占用网络带宽。

iftop输出图示

红帽与Debian的各个发行版都能使用iftop这一名称的软件包,但在红帽发行版方面大家可能需要从第三方资源库才能获取。一旦安装过程完成,我们在命令行中运行iftop命令即可启用(需要root权限)。和top命令一样,我们可以点Q键退出。

iftop界面屏幕的最上方是显示全局流量的信息栏。信息栏之下则是另外两列信息,一列为源IP、另一列为目标IP,二者之间以箭头填充帮助我们了解带宽被用于从自己的主机向外发送数据还是从远程主机端接收数据。再往下则是另外三个栏位,表示两台主机之间在2秒、10秒及40秒中的数据传输速率。与平均负载相似,大家可以看到目前带宽使用是否达到峰值,或者在过去的哪个时段达到过峰值。在屏幕的最下方,我们会找到传输数据(简称TX)与接收数据(简称RX)的总体统计结果。与top差不多,iftop的界面也会定期更新。

在不添加额外参数的情况下,iftop命令通常能够满足我们故障排查的全部需求;但有的时候,我们可能也希望利用一些选项实现特殊功能。iftop命令在默认情况下会显示查找到的第一个端口的统计信息,但在某些服务器中大家可能会使用多个端口,所以如果我们希望让iftop打理第二个以太网端口(即实例中的eth1),那么请输入iftop -i eth1

默认情况下,iftop会试图将所有IP地址通过解析转换为主机名称。这样做的缺点在于一旦远程DNS服务器速度缓慢,报告的生成速度也将随之惨不忍睹。另外,所有DNS解析活动都会增加额外的网络流量,而这些都会显示在iftop的报告界面当中。因此要禁用网络解析功能,别忘了在iftop命令后面加-n哦。

一般说来,iftop显示的是主机之间所使用的全局带宽;但为了帮助大家缩小排查范围,我们可能希望每台主机具体使用哪个端口进行通信。毕竟只要找到了主机中占用最大带宽的网络端口,我们就可以在判断是否接入FTP端口之外进行其它排查手段。启动iftop之后,按P键可以切换端口的显示与隐藏状态。不过大家可能会注意到,有时候显示所有端口状态可能导致我们正在关注的主机被挤出当前显示屏幕。如果出现这种情况,我们还可以按SD键来仅显示来自特定源或特定目标的端口。由于服务项目众多,目标主机可能随机使用多个端口并发生带宽占用峰值,这将导致工具无法识别出正在使用的服务,因此仅显示源端口还是相当有用的。不过服务器上的端口也可能与当前设备上的服务相对应。在这种情况下,我们可以使用前面提到的netstat -lnp来找出服务所侦听的端口。

与大多数Linux命令相似,iftop也拥有多种高级选项。我们在文章中提到的这些已经足以涵盖大多数故障排查需求,但为了满足大家进一步了解iftop功能的愿望,我教各位一个小技巧:只要输入man iftop,就可以阅读包含在软件包当中的使用手册、获得更多与之相关的知识。

参考链接


Linux服务器故障排查指南:出是谁占用了带宽

macOS Sierra (10.12.3)使用Android Studio 2.2.3导入Android 5.1.1_r38 (Lollipop)源代码

1.编译Android 5.1.1_r38源代码

参考链接:
macOS Sierra (10.12.3)上编译ARM版本Android 5.1.1_r38 (Lollipop)源代码

2.调整Android Studio的属性

默认情况下,macOS的磁盘分区文件名是不区分大小写的,但是我们编译的Android 5.1.1_r38源代码却是在新建的一个区分大小写的分区上的,因此需要临时要求Android Studio区分文件名的大小写。

$ vim ~/Library/Preferences/AndroidStudio2.2/idea.properties

在其中增加

idea.case.sensitive.fs=true

3. 编译Android SDK

Android SDK我们需要自己编译注意,此时磁盘空间可能已经不足了,我们首先增大一下磁盘空间

$ hdiutil detach /Volumes/android

$ hdiutil resize -size 100G ~/Android/android.dmg.sparseimage

$ hdiutil attach ~/Android/android.dmg.sparseimage -mountpoint /Volumes/android

$ export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

$ cd /Volumes/android

$ cd Android_Source

$ source build/envsetup.sh

$ lunch sdk-eng

$ export TARGET_BUILD_TYPE=debug

由于我们修改了TARGET_BUILD_TYPE,因此需要调整代码

$ vim ./development/build/sdk.atree

全部替换里面的${OUT_DIR}/target${OUT_DIR}/debug/target

编译代码

$ make sdk -j8

编译好的文件在out/host/darwin-x86/sdk/sdk目录下面。

4.生成工程文件

工程目录与编译目录相同

$ cd /Volumes/android

$ cd Android_Source

$ mmm development/tools/idegen/

$ ./development/tools/idegen/idegen.sh

$ rm -rf .classpath

编译完成后,在/Volumes/android目录下,生成android.ipr,然后用Android Studio 2.2.3导入已经存在的项目即可,导入后,需要比较长时间建立索引,要耐心等待。

导入完成后,根据错误提示,设置JDK为我们编译内核时候的JDK,设置Android SDK为我们刚刚编译的版本即可。
File->Project Structure->Project Settings->Project->Project SDK中设置JDK版本。

File->Project Structure->Project Settings->Modules->android->Dependencies中设置Android SDK路径以及版本。

参考链接