1
sandideas OP 是linux的vps。。。开了ss之类的,内存占用40%。。感觉剩下的应该够跑吧。
|
2
neoblackcap 2015-07-20 10:50:55 +08:00 1
你是不是就直接用shell去启动你的脚本?然后就退出了ssh?
|
3
laiyilong 2015-07-20 10:51:58 +08:00 via Android 1
没有优化好。。可以考虑多线程,把swap空间调大应该也可以
|
4
icedx 2015-07-20 10:52:01 +08:00 1
代码呢
|
5
loading 2015-07-20 10:52:12 +08:00 via Android 1
cpu超了?
|
6
msg7086 2015-07-20 11:10:02 +08:00 1
虚拟内存设定呢?
|
7
paw 2015-07-20 11:26:02 +08:00 1
ulimit -a
看一下,是不是这里限制了,virtual memory;open files ;stack size 等 以前在用OAH的VPS的时候碰到过,virtual memory有限制,坑爹货。 |
8
sandideas OP @neoblackcap
对。。。第一次弄这个,难道不是直接启动。。然后扔那么 |
11
lcqtdwj 2015-07-20 12:25:56 +08:00
win7长时间开着内存也就70M么?
|
16
sandideas OP @kqz901002 看了下。。这样是为了防止退出ssh被自动关掉么。。但是我连上去后就没关掉。。眼睁睁的看着他显示被kill。。
|
19
neoblackcap 2015-07-20 13:12:58 +08:00 1
@sandideas 贴代码是最快的,你还是贴下代码让大家review一下
|
20
knightlhs 2015-07-20 13:45:15 +08:00 2
@sandideas 不贴代码很难确认
从代码的角度思考 问题可能有: 1、是否有内存泄露 2、CPU突发峰值是否超标 3、内存突发峰值是否超标 从服务器的角度考虑 问题可能有: 1、服务器参数是否虚标 是否超售 特别是 OVZ的类型 内存严重不足 2、CPU是否被严格限制在一定的指标 其他暂时还没想到 |
22
sandideas OP @knightlhs
@msg7086 @neoblackcap @kqz901002 非常感谢你们回复。。 找到原因了,因为系统和mysql之类的会占用到百分之40左右的内存。 而我的代码会在刚开始一段时间从70多到200+。然后才会稳定到70多。。 原本默认的swap才100m。。我改成1g就够了。这样就不会被系统kill掉了。 新手。。莫笑。 |
24
sandideas OP |
25
knightlhs 2015-07-20 14:13:25 +08:00
@sandideas
这个要看主机商的设定 我这里无法粗浅的下结论 一般的中小型VPS提供商 长时间占用CPU不但会kill 还会封帐号 但是也是有区分的 有些专供计算类的云产品 是可以长时间高负荷的 只是价格比较喜人 具体你要问问你的服务商 具体的要求是什么了 |
27
zts1993 2015-07-20 14:37:19 +08:00 1
一般主机的后台会有监控 可以查看 CPU内存的使用历史记录
|
28
sandideas OP http://paste.ubuntu.com/11908931/
@knightlhs @neoblackcap @icedx 我还是贴代码吧。。 虽然可以运行,但是swap速度太慢了。 开了是个线程内存就会涨到300+ |
29
icedx 2015-07-21 02:45:58 +08:00 1
我感觉是你这个bs4 的对象没有被及时回收
开始代码 soup=BeautifulSoup(page) |
34
knightlhs 2015-07-21 11:09:17 +08:00 1
@sandideas
我对python不熟悉 我说一下我在go上写爬虫的思路 首先 你的解析器不需要每个线程上都new一个 采集线程上只要抓取到页面的信息就OK了 降低负载 采集回来的信息放进 队列里面 等待解析器统一处理(单例)因为这个玩意大多是单线程的 解析结果 出来以后 分析是否是列表 还是正文 如果是列表 那么返回采集队列 继续抓取 如果是正文 就可以保存了 一般系统开销都不在 采集这块 我一般可以开到 30-50个并发 解析器可以多实现几个 分布式 处理 通过 队列随机分配 这样就可以有效的降低 负载 供你参考 |
35
sandideas OP |
36
knightlhs 2015-07-21 11:24:48 +08:00 1
@sandideas
速度慢的问题 一般都不在采集跟解析 回头你自己写一个分析下 写入这块你分离出来 用一个单例实现 看看采集完成的时间 (不记写入时间) 我觉得你速度慢的原因可能在写入 磁盘效率不高 导致队列阻塞了 如果是这也原因的话 换保存方式 比如 mysql |