标签存档: rtorrent

rtorrent配置说明

rtorrent是一款Linux环境下快速的BT客户端
rtorrent配置文件位于 ~/.rtorrent.rc

Linux 系统网络优化

以下几项是可以修改的网络参数的一小部分,我查资料把与下载可能有关的确定为以下参数。
#iip_forward,ip包转发(默认0),做路由器需设为1启用,MSS只是客户端关闭设0即可
echo 0 > /proc/sys/net/ipv4/ip_forward
#ip_default_ttl,ip包生存时间(默认64),默认64即可
echo 64 > /proc/sys/net/ipv4/ip_default_ttl
#tcp_retries2,已存在tcp连接重试次数(默认15次),普遍认为数值可调小故设7
echo 7 > /proc/sys/net/ipv4/tcp_retries2
#tcp_fin_timeout,tcp会话wait2超时时间(默认180秒),普遍认为数值可调小故设60
echo 60 > /proc/sys/net/ipv4/tcp_fin_timeout
#ip_local_port_range,设定本地对外连接的端口范围,默认1024-4999,适当扩大到 6999.
echo “1024 6999” > /proc/sys/net/ipv4/ip_local_port_range

rTorrent普通设定优化

1.功能设定

#此项一定要开(如果是PT种子时,会自动将该任务peer_exchange关闭)
peer_exchange = yes
#下载会话信息
session = ~/rtorrent
#是否允许udp连接
use_udp_trackers = no
#pt不允许dht
dht = off
#下载完成后是否重新hash
check_hash = no
#文件名编码
encoding_list=UTF-8
#发送缓存
send_buffer_size = 4M
#接收缓存
receive_buffer_size = 8M
port_range = 32199-34999
hash_read_ahead = 30
hash_interval = 200
set_max_open_http = 8
#scgi
scgi_port = localhost:5000

2.连接设定
与下载速率有关的设定有以下几项,理论上来说越大越好,但实际上要综合性能任务等多方面考虑。
因为总peers(连接数)与网络速率(上传、下载两部分)与rTorrent的内存占用成正比。
download_rate = 0
upload_rate = 0
每个任务的最小连接数、最大连接数、做种时候最小连接数、做种时最大连接数、最大上传数。
min_peers = 40
max_peers = 200
min_peers_seed = 10
max_peers_seed = 50
max_uploads = 15
但是根据机器性能,尤其是min_peers很难取舍,因为下载中的任务(leech),
现有连接数<40时,rTorrent会持续的访问多个tracker来保证连接达到40,而此时就可能引发CPU的占用问题

3.细节设定
Tos,Type of Service(服务类型),分别是低延迟lowdelay,高速率throughput,高可靠度reliability,低消耗。
或者也可以自定义一个值,这里目前把它设为高速率(我昨天找到一个据说是黄金值,好像设了后速度飞快,但仍在试验阶段)
#tos = default|lowdelay|throughput|reliability|mincost, tos = hex
tos = throughput
**”set_max_open_http”是最重要的效率优化值,目前仍在试验中,外网上有老外探讨这个问题,专门把它设低,主要针对低性能多任务情况。
因为rTorrent在进行HTTP访问时,对CPU占用率极高,所以才有了MSS上经常遇到的假死现象(screen操作没有任何反应),
这时如果你用top看一下,rtorrent的CPU占用不是90%以上就是不正常的显示为0%,但Load average值会很高。
rtorrent对HTTP访问(也就是访问tracker服务器取得返回连接信息)的默认设置是32个.
当你有很多任务(假如下载10个,做种50个)同时进行,一旦开始这个过程,CPU立刻就从<10%飙升到100%了。
这种情况,轻微的会导致rTorrent的screen下无法操作,
严重的会导致MSS失去响应,所有的tcp连接失效,等恢复后看到下载上传速度均为0.
而造成这种情况的关键原因是rTorrent完全遵守标准的BT下载原理所致,比如软件启动后的过程是。
载入任务(如50个种子),按次序所有的 tracker开始排队进行访问(此时CPU已经飙升),依次访问成功后,进入等待状态(CPU降到10%以下),
但每个tracker在各自等待1800秒(30分钟)会再次重复同样的过程,所以就造成rTorrent总是在大约30分钟进入严重的假死状态。
所以必须在配置文件中设定 HTTP最大值减少,强制延长HTTP同时访问数,反而可以减少或避免rTorrent假死状态提高工作效率。
#设定http最大值(用于 http tracker访问),默认32,建议MSS设为8以下,我正在测试设为2的效果(这样可以完全避免假死状况,但又会影响访问tracker取得连接的效率)。
set_max_open_http = 8

自动化应用设定

这些是积累的设定总结,已有多处更新,部分已包含在分组管理中。
(1)关于共享率的设置如下即可实现(当任务下载完成后)
ratio.enable=
ratio.min.set=10
ratio.max.set=50
ratio.upload.set=20M
是指满足下面两个条件之一就关闭(close)任务,
1.当分享率达到10%并且上传大于20M时,
2.当分享率达到50%
默认设置就是close任务了(不需要下面这句),如果加上的话是关闭+删除,也可增加其他设定
注意不要用d.erase是删除任务且如果有其他设定将删掉全部文件。
#system.method.set = group.seeding.ratio.command, d.close=, d.erase=
(2)完成或者删除任务时可以设为自动转移或者执行其他命令
以下为旧版本命令,目前兼容可用:
1.删除时自动删除下载目录
on_erase = rm_complete,”d.open= ;execute=rm,-rf,$d.get_base_path=”
2.完成时自动转移下载目录
on_finished = move_complete,”execute=mv,-u,$d.get_base_path=,/shares/mss-hdd/Public/Downloads ;d.set_directory=/shares/mss-hdd/Public/Downloads”
3.完成后删除T状态(tied到watch下种子)和watch下对应的.torrent文件
on_finished = remove_tied,”d.delete_tied=”
4.完成后执行4g脚本判断是否需要合并(详见第3条4g脚本)
on_finished = 4g,”execute=RT4g.sh,$d.get_base_path=,$d.get_custom2=”
以上命令实测可以支持任何文件名(包括中文、字符、空格等),如果中文字符出现问题
大概的解决方法是:
ipkg install utf8proc (安装了一个utf8相关的包)
export LC_ALL=zh_CN.UTF-8(设置了一下语言)
(3)大于4g的文件合并修改版(感谢原脚本作者,只是做了一些功能修正)
修改的脚本解决两处bug(不含目录的单个文件被RT强制分割后无法进行合并和必须依赖建立link文件才能运行),
增加判断是否为PT种子的功能,默认如果是PT种子的话,不删除分割文件(000,001),保证下载继续做种(但需要以后自己动手删除文件)。
内容详见附件
(4)活用schedule命令可以做很多事情。
其实它的标准格式是schedule = 任务名称,执行时间,生效时间,命令
如:自动变更下载速率
schedule = throttle_1,01:00:00,24:00:00,download_rate=0
schedule= throttle_2,05:00:00,24:00:00,download_rate=25
自动变更加密协议(因为我的宽带是在凌晨0点解开P2P封锁)
schedule = encryption_1a,00:00:00,24:00:00,encryption=enable_retry
schedule = encryption_1p,00:00:05,24:00:00,”print=\”encryption:enable_retry\””
schedule = encryption_2a,07:00:00,24:00:00,encryption=try_outgoing
schedule = encryption_2p,07:00:05,24:00:00,”print=\”encryption:try_outgoing\””

(5)利用screen的外部输入方法来修改rTorrent的任何设置。
比如设定upload为30的话,可是输入下面的命令
screen -s torrent -X eval ‘stuff ^Xupload_rate=30^M’
比如在screen下用命令调整上传速率。
screen -s torrent -X eval ‘stuff \”ccccssss\”‘
以此来结合crontab,可以做到在任意日期时间组合下修改任何rTorrent的配置。

其他辅助性设定:
(1).设定rTorrent时区以保证运行
schdule设定前提必须是时间正确,结果我发现出错误的原因是时区问题。
所以必须在rTorrent启动脚本中增加”export TZ=CST-8″语句,
也就是说现在的S99rtorrent脚本开头应该是下面几句。
#!/opt/bin/sh
export HOME=/opt/root
export LC_ALL=zh_CN.UTF-8
export TZ=CST-8
rm /shares/mss-hdd/Public/bt/rtorrent/session/rtorrent.lock

(2).增加执行记录
配置文件加入一行,可以记录rtorrent执行的命令,比如下载完成后mv。
才发现/var/log在mss下是随着系统启动临时的,所以把日志放到/pub/log下可以永久保存。
execute_log = /pub/log/rtorrent.log

(3).给rTorrent增加速度记录功能的简易脚本
1.
在/opt/bin下
vi rtlog.sh
#!/bin/sh
time=`date +%Y”-“%m”-“%d” “%H”:”%M”:”%S`
echo “$time Down: “$1” bps Up: “$2″ bps”>>/pub/log/speedRT.log
wq存盘后,一定要chmod 777 rtlog.sh

2.
vi .rtorrent.rc
增加一行配置(目前时间间隔设定为15分钟)
schedule = speedlog,600,600,”execute=/opt/bin/rtlog.sh,$get_down_rate=,$get_up_rate=”
3.cat /pub/log/speedRT.log
就能看到rTorrent的速度记录了

(5)解决screen下直接按ctrl+s,ctrl+q无效的方法
在登陆后输入命令取消这两个的绑定即可。
stty start undef
stty stop undef

参考配置:

################################## 配置文件开始 ####################################
# This is an example resource file for rTorrent. Copy to
# ~/.rtorrent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.

# 每个torrent文件允许连接的最大以及最小的peer的数目
min_peers = 40
max_peers = 250

# Same as above but for seeding completed torrents (-1 = same as downloading)
#min_peers_seed = 10
#max_peers_seed = 50

# Maximum number of simultanious uploads per torrent.
max_uploads = 15

# 全局上传和下载速率,单位是KB. “0″ 代表无限制
download_rate = 0
upload_rate = 0

# 默认下载目录,下载好的文件会放到这里
directory = /home/jelong/bt/

# Default session directory. Make sure you don’t run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = /home/jelong/bt/session

# 下面是一个非常有用的功能:监视目录
# 放在/opt/torrent目录底下的torrent文件会自动开始下载
# 配置好监视目录以后,只要通过samba或scp往这个目录传种子,就会自动开始下载
schedule = watch_directory,5,5,load_start=/home/jelong/torrent/*.torrent
#schedule = untied_directory,5,5,stop_untied=

# Close torrents when diskspace is low.
schedule = low_diskspace,5,60,close_low_diskspace=100M

# Stop torrents when reaching upload ratio in percent,
# when also reaching total upload in bytes, or when
# reaching final upload ratio in percent.
# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
#schedule = ratio,60,60,stop_on_ratio=200,200M,2000

# The ip address reported to the tracker.
#ip = 127.0.0.1
#ip = rakshasa.no

# The ip address the listening socket and outgoing connections is
# bound to.
#bind = 127.0.0.1
#bind = rakshasa.no

# Port range to use for listening.
port_range = 6890-6999

# Start opening ports at a random position within the port range.
port_random = yes

# Check hash for finished torrents. Might be usefull until the bug is
# fixed that causes lack of diskspace not to be properly reported.
#check_hash = no

# 是否使用UDP trackers,建议选yes
use_udp_trackers = yes

# Alternative calls to bind and ip that should handle dynamic ip’s.
#schedule = ip_tick,0,1800,ip=rakshasa
#schedule = bind_tick,0,1800,bind=rakshasa

# 是否允许协议加密,建议改成allow_incoming,enable_retry,prefer_plaintext的组合体,具体原因就不解释了
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
#
# The example value allows incoming encrypted connections, starts unencrypted
# outgoing connections but retries with encryption if they fail, preferring
# plaintext to RC4 encryption after the encrypted handshake
#
encryption = allow_incoming,enable_retry,prefer_plaintext

#
# Do not modify the following parameters unless you know what you’re doing.
#

# Hash read-ahead controls how many MB to request the kernel to read
# ahead. If the value is too low the disk may not be fully utilized,
# while if too high the kernel might not be able to keep the read
# pages in memory thus end up trashing.
#hash_read_ahead = 10

# Interval between attempts to check the hash, in milliseconds.
#hash_interval = 100

# Number of attempts to check the hash while using the mincore status,
# before forcing. Overworked systems might need lower values to get a
# decent hash checking rate.
#hash_max_tries = 10

# Max number of files to keep open simultaniously.
#max_open_files = 128

# Number of sockets to simultaneously keep open.
#max_open_sockets =

# Example of scheduling commands: Switch between two ip’s every 5
# seconds.
#schedule = “ip_tick1,5,10,ip=torretta”
#schedule = “ip_tick2,10,10,ip=lampedusa”

# Remove a scheduled event.
#schedule_remove = “ip_tick1″

#选择utf-8可以在samba中看到中文
encoding_list = UTF-8

#rtorrent 创建的文件夹(或文件)的权限,默认是0644,建议改成0000(感谢xuanwuhu),使所有用户都能访问。
#也只有这样在samba中才 可以直接打开、拷贝、删除rtorrent创建的文件
umask = 0000

#下面两个选项打开dht的功能,照做即可,另外 如果想让 rtorrent 在启动的时候就使用 DHT,可以把dht=auto改为dht=on
dht = on
dht_port = 6778

#允许peer交换,当然允许了,多多益善啊
peer_exchange = yes

#最后这个参数 和web配置以及远程管理有关,稍后再介绍
scgi_port = :5000

################################## 配置文件结束 ####################################