Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

经常出现:任务出错,错误消息:没有可用的SA帐号,重启VPS继续又正常 #138

Open
52vps opened this issue Jul 30, 2020 · 27 comments

Comments

@52vps
Copy link

52vps commented Jul 30, 2020

如题,确定SA账号是够用,而且已经都检测过,没有异常
每次出现这个问题,我就重启VPS,然后恢复正常,可以继续
请问大佬们,这是什么地方有问题啊!

@iwestlin
Copy link
Owner

是不是 1roGTt7T4_6GfRuYArVp-Too_JObB_esL这个资源啊,如果是,参考 #137

@52vps
Copy link
Author

52vps commented Jul 30, 2020

不是,很多资源都出现这个提示!这几天陆陆续续出现几十次了

@iwestlin
Copy link
Owner

那可能是sa超过750g的每日流量限制了

@52vps
Copy link
Author

52vps commented Jul 30, 2020

不是啊,我有900个SA,如果超限制,应该就是重启也没用啊
只要重启VPS,再继续,就又可以复制下去了
一般出现频率是每天8次之内

@iwestlin
Copy link
Owner

https://stackoverflow.com/questions/10311969/what-is-the-limit-on-google-drive-api-usage
那应该是触发频率限制了

如果超限制,应该就是重启也没用啊

Google的API行为并不是完全一致的,某个sa这次触发了限制被剔除掉了,下次重启后也许能再正常请求几次,然后就又触发限制被剔除了。

如果你不想因为触发 rate limit 就剔除掉这个sa,可以把这行

if (use_sa && message && message.toLowerCase().includes('rate limit')) {

改成

if (false) {

@52vps
Copy link
Author

52vps commented Jul 30, 2020

哦哦,那我如果不改,是不是过几天等限制消失就行了啊

@iwestlin
Copy link
Owner

iwestlin commented Jul 30, 2020 via email

@52vps
Copy link
Author

52vps commented Jul 30, 2020 via email

@kafuuchino-s
Copy link

kafuuchino-s commented Aug 1, 2020

我也是有590个sa,理论来说可以复制432tb的资源,但是我备份68tb的团队盘时,但也出现了没有可用sa账户的情况,我用folderclone验证了一下sa是可以正常使用的,然后看了下谷歌云的api,发现团队盘中sa加入的项目都用到了,每个项目Google Drive API大概有50000的请求,配额限制中也没看见哪里有超出,请求速度大概在5~7/s。

@iwestlin
Copy link
Owner

iwestlin commented Aug 1, 2020

https://github.com/iwestlin/gd-utils/blob/master/changelog.md
请看08/02的更新日志

@tingv
Copy link

tingv commented Aug 5, 2020

https://stackoverflow.com/questions/10311969/what-is-the-limit-on-google-drive-api-usage
那应该是触发频率限制了

如果超限制,应该就是重启也没用啊

Google的API行为并不是完全一致的,某个sa这次触发了限制被剔除掉了,下次重启后也许能再正常请求几次,然后就又触发限制被剔除了。

如果你不想因为触发 rate limit 就剔除掉这个sa,可以把这行

if (use_sa && message && message.toLowerCase().includes('rate limit')) {

改成

if (false) {

谷歌返回的 Rate Limit 错误有两种,一个是 Rate Limit Exceeded 一个是 User rate limit exceeded,前者好像是 api 请求太快导致的,直接重试即可,后者才是超过 750G 后触发的,如果仅仅之用 includes('rate limit') 来判断是否达到 750G,那是不准确的,应该用 User rate limit exceeded 来判断

@kafuuchino-s
Copy link

https://stackoverflow.com/questions/10311969/what-is-the-limit-on-google-drive-api-usage
那应该是触发频率限制了

如果超限制,应该就是重启也没用啊

Google的API行为并不是完全一致的,某个sa这次触发了限制被剔除掉了,下次重启后也许能再正常请求几次,然后就又触发限制被剔除了。
如果你不想因为触发 rate limit 就剔除掉这个sa,可以把这行

if (use_sa && message && message.toLowerCase().includes('rate limit')) {

改成

if (false) {

谷歌返回的 Rate Limit 错误有两种,一个是 Rate Limit Exceeded 一个是 User rate limit exceeded,前者好像是 api 请求太快导致的,直接重试即可,后者才是超过 750G 后触发的,如果仅仅之用 includes('rate limit') 来判断是否达到 750G,那是不准确的,应该用 User rate limit exceeded 来判断

所以能通过降低配置中单个任务的网络请求并行数量,来防止超过频率限制吗,我之前开的是100

@tingv
Copy link

tingv commented Aug 5, 2020

https://stackoverflow.com/questions/10311969/what-is-the-limit-on-google-drive-api-usage
那应该是触发频率限制了

如果超限制,应该就是重启也没用啊

Google的API行为并不是完全一致的,某个sa这次触发了限制被剔除掉了,下次重启后也许能再正常请求几次,然后就又触发限制被剔除了。
如果你不想因为触发 rate limit 就剔除掉这个sa,可以把这行

if (use_sa && message && message.toLowerCase().includes('rate limit')) {

改成

if (false) {

谷歌返回的 Rate Limit 错误有两种,一个是 Rate Limit Exceeded 一个是 User rate limit exceeded,前者好像是 api 请求太快导致的,直接重试即可,后者才是超过 750G 后触发的,如果仅仅之用 includes('rate limit') 来判断是否达到 750G,那是不准确的,应该用 User rate limit exceeded 来判断

所以能通过降低配置中单个任务的网络请求并行数量,来防止超过频率限制吗,我之前开的是100

没用的,只要是批量转存,都容易触发 Rate Limit Exceeded 错误,若不处理就会漏文件,只有作者分别处理这两种错误才行。遇到 Rate Limit Exceeded 重试,遇到 User rate limit exceeded 踢 sa 。

我搜了一下 gd-utils/src/gd.js 这个文件里的关键词 rate limit ,发现作者应该是把两种错误都当成超 750G 来处理了。

@iwestlin
Copy link
Owner

iwestlin commented Aug 5, 2020

谷歌返回的 Rate Limit 错误有两种,一个是 Rate Limit Exceeded 一个是 User rate limit exceeded

我知道的,#150 (comment) 这里解释过了

我只有在使用个人授权时遇到过 rate limit 的报错;使用sa由于每次请求是随机选的,所以只要可用sa数量不是个位数,就不大可能会触发 rate limit

@iwestlin
Copy link
Owner

iwestlin commented Aug 5, 2020

若不处理就会漏文件

每个请求都有7次重试的机会,遇到这两种错误都会剔除掉对应的sa,所以漏文件不会是这个原因

漏文件最大可能是sa没有相关的权限,导致转存请求404,而程序无法区分是由于权限问题产生的404还是由于源文件取消分享或者触发审核导致的404,所以不会对sa进行处理,所以如果无效的sa很多的话,才会导致漏文件。
还有一种可能是其实没有漏文件,只是Google的缓存问题,具体见 https://github.com/iwestlin/gd-utils/blob/master/readme.md#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

@iwestlin
Copy link
Owner

iwestlin commented Aug 5, 2020

我再解释一下为什么设计成这两种情况都剔除sa:
程序运行时,会加载./sa目录下的所有json文件,但是出于一些考虑,如果json文件数量超过1000的话,会分批使用,每次使用1000个,当一批sa被剔除干净后,会自动换成下一批次,如果下一批次没有sa可用了则会报错。
所以当某个批次只剩最后几个sa的时候,每个sa被选到的概率足够大,就有可能会触发rate limit,从而导致被剔除,这也正是这么设计的目的——加速了这一批次的结束,从而更快的换到新的一批sa

@iErics
Copy link

iErics commented Aug 6, 2020

这个问题似乎变得越发严重了,我600个SA复制不到10T就显示没有可用SA账号了,新增100个SA之后复制不到2T就不可用了。谷歌是开始针对转存做出限制了吗?

@RouRouX
Copy link

RouRouX commented Aug 6, 2020

我昨天也遇到了,转存的文件不大,只是文件个数比较多,直接就报:没有可用的SA帐号了,pm2重启项目以后正常,重新转存继续报错。

@kafuuchino-s
Copy link

我昨天也遇到了,转存的文件不大,只是文件个数比较多,直接就报:没有可用的SA帐号了,pm2重启项目以后正常,重新转存继续报错。

我也是问文件多的时候才报错,平时复制一点文件大但不多的链接不会报错

@RouRouX
Copy link

RouRouX commented Aug 6, 2020

我昨天也遇到了,转存的文件不大,只是文件个数比较多,直接就报:没有可用的SA帐号了,pm2重启项目以后正常,重新转存继续报错。

我也是问文件多的时候才报错,平时复制一点文件大但不多的链接不会报错

嗯,咱俩情况一样一样的,数量多的小文件转存就这样,而且pm2重启以后再转存还是报错,如果不重启重新转存直接就报错,文件统计都统计不了。

@iwestlin
Copy link
Owner

iwestlin commented Aug 6, 2020

https://github.com/iwestlin/gd-utils/blob/master/changelog.md#2020-08-06

请看今天的更新日志,基本可以解决这个问题

@iwestlin iwestlin pinned this issue Aug 6, 2020
@xxyyyx
Copy link

xxyyyx commented Jan 31, 2021

现在700sa 复制了25g就没了

@iwestlin
Copy link
Owner

现在700sa 复制了25g就没了

Google现在不但限制拷贝者的流量,也限制了分享者的流量,具体可参考: https://www.blueskyxn.com/202101/3357.html

如果发现某个资源拷贝进度一直不变,那肯定是分享者达到限制了。
可以给机器人发送 /reload 停止任务

@xxyyyx
Copy link

xxyyyx commented Feb 1, 2021

现在700sa 复制了25g就没了

Google现在不但限制拷贝者的流量,也限制了分享者的流量,具体可参考: https://www.blueskyxn.com/202101/3357.html

如果发现某个资源拷贝进度一直不变,那肯定是分享者达到限制了。
可以给机器人发送 /reload 停止任务

是一个半年前的资源 应该没人会去转了

@iwestlin
Copy link
Owner

iwestlin commented Feb 5, 2021

分享者流量的限制不是以资源,而是以分享者的帐号为单位的。
如果这位分享者分享的其他资源超过了流量限制,那么这个资源也转不了。

@iwestlin
Copy link
Owner

iwestlin commented Feb 5, 2021

gd已经不适合转存别人的资源了,只适合自己拿来当仓库盘用。
它的种种限制可以说是釜底抽薪,就是不让人把它当复制机用,虽然我有些手段可以稍微绕过一些限制,但也无济于事,更不知道它以后还会新增什么别的限制……

@tanpengsccd
Copy link

那么 "Error: 此资源连续7次触发userRateLimitExceeded错误,停止复制" 也可能是 “分享者流量的限制”的原因吧 , 我100个SA复制了2T的文件,就报错了,重启重试 直接 "Error: 此资源连续7次触发userRateLimitExceeded错误,停止复制" .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants