我正在进入ActiveRecord::ConnectionTimeoutError
一个独立于rails应用程序运行的守护进程.我正在使用带有Apache和MySQL的Passenger作为数据库.
Passenger的默认池大小为6(至少是文档告诉我的),因此它不应该使用超过6个连接.
我将ActiveRecord
池大小设置为10,即使我认为我的守护进程只需要一个连接.我的守护进程是一个具有多个线程的进程,这些进程ActiveRecord
在此处调用以将内容保存到与rails app共享的数据库中.
我需要弄清楚的是线程是否根本不能共享一个连接,或者他们是否只是在不释放旧连接的情况下继续请求新连接.我知道我可以增加池大小并推迟问题,但守护进程可能有数百个线程,迟早池将耗尽连接.
我想知道的第一件事是Passenger确实只使用了6个连接,而问题在于守护进程.我该如何测试?
其次,我想弄清楚每个线程是否需要自己的连接,或者是否需要告诉他们重用已经拥有的连接.如果他们确实需要他们自己的联系,也许他们只需要被告知在他们不使用时不要抓住他们?线程毕竟是大部分时间都在睡觉.
我有一个网站几个月来一直工作正常.今天早上我开始收到503 Service Unavailable错误.检查IIS后,我注意到应用程序池正在停止.由于我之前遇到过问题,我怀疑WebRequest是问题所在.所以我注释掉了网站的WebRequest部分,猜猜是什么,应用程序池不再被禁用.我怀疑还有另一个安全更新,我无法弄清楚我还需要做些什么来让WebRequest再次运行.
我已经尝试过的事情:
1)aspnet_regiis -u然后-i
2)重新安装.net框架
更多信息:我使用Windows认证的asp.net v4.0应用程序池的NetworkService帐户
事件日志中的错误是:
"HipIISEngineStub.dll无法加载.数据是错误."
var request = (HttpWebRequest)WebRequest.Create(path1);
request.Credentials = CredentialCache.DefaultCredentials;
request.PreAuthenticate = true;
var getResponse = new Func<WebRequest, WebResponse>(req => req.GetResponse());
try
{
return getResponse(request).GetResponseStream();
}
Run Code Online (Sandbox Code Playgroud) 我想这是因为我没有关闭我的数据库的连接.我在下面为我的Datalayer发布了代码.我需要关闭我的连接吗?我怎么也这样做?这是造成问题的代码吗?
下面是错误代码:
超时已过期.从池中获取连接之前经过的超时时间.这可能是因为所有池连接都在使用中并且达到了最大池大小.
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.InvalidOperationException:超时已过期.从池中获取连接之前经过的超时时间.这可能是因为所有池连接都在使用中并且达到了最大池大小.
public DataTable getPictures()
{
//get database connection string from config file
string strConectionString = ConfigurationManager.AppSettings["DataBaseConnection"];
//set up sql
string StrSql = "SELECT MEMBERS.MemberName, Picture.PicLoc, Picture.PicID, Picture.PicRating FROM Picture INNER JOIN MEMBERS ON Picture.MemberID = MEMBERS.MemberID WHERE (Picture.PicID = @n) AND (Picture.PicAproval = 1) AND (Picture.PicArchive = 0)AND (MEMBERS.MemberSex = 'F')";
DataTable dt = new DataTable();
using (SqlDataAdapter daObj = new SqlDataAdapter(StrSql, strConectionString))
{
daObj.SelectCommand.Parameters.Add("@n", SqlDbType.Int);
daObj.SelectCommand.Parameters["@n"].Value = GetItemFromArray();
//fill data table
daObj.Fill(dt);
}
return dt; …
Run Code Online (Sandbox Code Playgroud) 这个(非常简化的例子)工作正常(Python 2.6.6,Debian Squeeze):
from multiprocessing import Pool
import numpy as np
src=None
def process(row):
return np.sum(src[row])
def main():
global src
src=np.ones((100,100))
pool=Pool(processes=16)
rows=pool.map(process,range(100))
print rows
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
然而,经过多年的教育,全球状态不好!!! ,我所有的直觉告诉我,我真的宁愿写更接近的东西:
from multiprocessing import Pool
import numpy as np
def main():
src=np.ones((100,100))
def process(row):
return np.sum(src[row])
pool=Pool(processes=16)
rows=pool.map(process,range(100))
print rows
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
但当然这不起作用(挂起无法腌制的东西).
这里的例子是微不足道的,但是当你添加多个"进程"函数时,每个函数都依赖于多个额外的输入......这一切都让人想起30年前用BASIC编写的东西.尝试使用类来至少使用适当的函数聚合状态似乎是一个明显的解决方案,但在实践中似乎并不那么容易.
是否有一些推荐的模式或样式使用multiprocessing.pool,这将避免全局状态的扩散,以支持我想并行映射的每个函数?
经验丰富的"多处理专业人员"如何处理这个问题?
更新:请注意,我实际上对处理更大的数组感兴趣,因此上面的src
每个调用/迭代的变化都不如将其分配到池的工作进程中.
我正在尝试一些关于String Pool的性能基准测试.但是,预计结果不会出现.
我做了3个静态方法
我的期望是(1.最快 - > 3.最慢)
但基准测试显示"Te"+"st"比"Test"快一点.
new String(): 141677000 ns
"Test" : 1148000 ns
"Te"+"st" : 1059000 ns
new String(): 141253000 ns
"Test" : 1177000 ns
"Te"+"st" : 1089000 ns
new String(): 142307000 ns
"Test" : 1878000 ns
"Te"+"st" : 1082000 ns
new String(): 142127000 ns
"Test" : 1155000 ns
"Te"+"st" : 1078000 ns
...
Run Code Online (Sandbox Code Playgroud)
这是代码:
import java.util.concurrent.TimeUnit;
public class StringPoolPerformance {
public static long perform0() {
long start = System.nanoTime();
for …
Run Code Online (Sandbox Code Playgroud) 在我的游戏中,子弹不断创建,因此我想为此使用Pool
类.然而,问题是我有很多类型的子弹.所有这些都扩展了相同的父类Projectile
.目前有19种子弹.Pool
为每个人创建一个类是个坏主意.还有更多可能会来.
我试图施展BallistaArrow arrow = (BallistaArrow) world.getPool().obtain();
.但是我得到了施放异常:
[..].mygame.Projectile cannot be cast to [...].mygame.engineer.BallistaArrow
.
BallistaArrow是Projectile的儿童类.
有没有办法解决这个问题,所以我可以Pool
为所有Projectile
扩展对象都有一个类?
我需要执行许多并行数据库连接和查询的池.我想使用multiprocessing.Pool或concurrent.futures ProcessPoolExecutor.Python 2.7.5
在某些情况下,查询请求需要太长时间或永远不会完成(挂起/僵尸进程).我想从已经超时的multiprocessing.Pool或concurrent.futures ProcessPoolExecutor中删除特定进程.
下面是一个如何杀死/重新生成整个进程池的示例,但理想情况下我会尽量减少CPU抖动,因为我只想杀死一个特定的长时间运行的进程,该进程在超时秒后没有返回数据.
出于某种原因,在返回并完成所有结果后,下面的代码似乎无法终止/加入进程池.它可能与发生超时时杀死工作进程有关,但是当Pool被杀死并且结果符合预期时,Pool会创建新工作程序.
from multiprocessing import Pool
import time
import numpy as np
from threading import Timer
import thread, time, sys
def f(x):
time.sleep(x)
return x
if __name__ == '__main__':
pool = Pool(processes=4, maxtasksperchild=4)
results = [(x, pool.apply_async(f, (x,))) for x in np.random.randint(10, size=10).tolist()]
while results:
try:
x, result = results.pop(0)
start = time.time()
print result.get(timeout=5), '%d done in %f Seconds!' % (x, time.time()-start)
except Exception as e:
print str(e)
print '%d Timeout Exception! …
Run Code Online (Sandbox Code Playgroud) 我读了一些关于窗口线程池的部分.它看起来像CLR线程池.
CLR基于Windows,所以CLR线程基于windows线程池,是不是?
我知道每个.net进程都有一个线程池,windows线程池中的情况是什么?操作系统有一个线程池还是多个?
在C#中,开发人员可以通过代码控制窗口线程池吗?
我试图在Python中使用多处理池.这是我的代码:
def f(x):
return x
def foo():
p = multiprocessing.Pool()
mapper = p.imap_unordered
for x in xrange(1, 11):
res = list(mapper(f,bar(x)))
Run Code Online (Sandbox Code Playgroud)
当代码xrange
很小时,这段代码使用所有CPU(我有8个CPU)xrange(1, 6)
.但是,当我将范围增加到xrange(1, 10)
.我观察到只有1个CPU以100%运行,而其余的只是空转.可能是什么原因?是因为,当我增加范围时,操作系统会因过热而关闭CPU吗?
我该如何解决这个问题?
为了复制我的问题,我创建了这个例子:它是一个来自字符串问题的简单ngram生成.
#!/usr/bin/python
import time
import itertools
import threading
import multiprocessing
import random
def f(x):
return x
def ngrams(input_tmp, n):
input = input_tmp.split()
if n > len(input):
n = len(input)
output = []
for i in range(len(input)-n+1):
output.append(input[i:i+n])
return output
def foo():
p = multiprocessing.Pool()
mapper = p.imap_unordered …
Run Code Online (Sandbox Code Playgroud) 这让我的脖子痛!我有三个问题.
1)我想在我的项目中配置CommonsPool2TargetSource以汇集我的自定义POJO类.
到目前为止我做了什么:
MySpringBeanConfig类:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.redirect.controller","com.redirect.business","com.redirect.dao.impl","com.redirect.model"})
@EnableTransactionManagement
@PropertySource("classpath:" + JioTUConstant.SYSTEM_PROPERTY_FILE_NAME + ".properties")
@Import({JioTUCouchbaseConfig.class,JioTUJmsConfig.class})
public class JioTUBeanConfig extends WebMvcConfigurerAdapter {
private static final Logger LOGGER = Logger.getLogger(JioTUConfig.class);
@Bean
public CommonsPool2TargetSource poolTargetSource() {
CommonsPool2TargetSource commonsPool2TargetSource = new CommonsPool2TargetSource();
commonsPool2TargetSource.setTargetBeanName("jioTUURL");
commonsPool2TargetSource.setMinIdle(5);
commonsPool2TargetSource.setMaxIdle(5);
commonsPool2TargetSource.setMaxSize(10);
return commonsPool2TargetSource;
}
@Bean
public ProxyFactoryBean proxyFactoryBean() {
ProxyFactoryBean proxyFactoryBean = new ProxyFactoryBean();
proxyFactoryBean.setTargetSource(poolTargetSource());
return proxyFactoryBean;
}
@Bean
public MethodInvokingFactoryBean poolConfigAdvisor() {
MethodInvokingFactoryBean poolConfigAdvisor = new MethodInvokingFactoryBean();
poolConfigAdvisor.setTargetObject(poolTargetSource());
poolConfigAdvisor.setTargetMethod("getPoolingConfigMixin");
return poolConfigAdvisor;
}
}
Run Code Online (Sandbox Code Playgroud)
我在"com.redirect.model"包中的POJO类:
@Repository …
Run Code Online (Sandbox Code Playgroud) pool ×10
java ×3
python ×3
c# ×2
activerecord ×1
android ×1
asp.net ×1
benchmarking ×1
clr ×1
database ×1
libgdx ×1
object ×1
process ×1
proxyfactory ×1
ruby ×1
spring ×1
sql ×1
string ×1
timeout ×1
webrequest ×1