一、创建连接方式对性能影响
在公司并发测试的时候遇到的问题,开始并发量只能达到10的并发量,不满足设计要求(PS:要求20),(因为受到别的服务的影响,并发不高,和fastDFS没有关系)。我的这个服务只涉及到从fastDFS进行上传和下载,没有进行处理,不应该会这么低的并发。后来发现问题在于注册服务上;
上传文件
代码语言:javascript复制 //获取上传对象
@Autowired
private FastDFSClient fastDFSClient;
//上传文件
String[] upload_file = fastDFSClient.uploadFile(bytes, extFilename, null);
创建fastDFS连接
代码语言:javascript复制 public FastDFSClient() throws Exception {
//调用PropertieUtil工具类获取配置文件中trackerServer内容
String trackerServer=PropertieUtil.getProperty("application.properties", "trackerServer").replace(""", "");
//注册fastDFS服务
ClientGlobal.initByTrackers(trackerServer);
trackerClient = new TrackerClient();
trackerServer = trackerClient.getConnection();
storageServer = null;
storageClient = new StorageClient1(trackerServer, storageServer);
}
封装的获取配置文件的工具类
代码语言:javascript复制public class PropertieUtil {
public static String getProperty(String properties, String key) {
Properties pro = new Properties();
//反向代理获取配置文件
InputStream in = PropertieUtil.class.getClassLoader().getResourceAsStream(properties);
try {
//将配置文件转为properties类型
pro.load(in);
} catch (IOException e) {
e.printStackTrace();
}
//获取需要的配置信息
String property = pro.getProperty(key);
return property;
}
上面这种方式,在上传的时候,只需要进行上传服务就可以用,不再需要每次进行new注册服务。但是,这种服务会再去调用一个方法,通过反射的方式获取代码的方式,性能降低。将注册方式改为new类型注册以后,并发问题得到了解决。
上传文件
代码语言:javascript复制 //注入fastDF地址
@Value(value = "${tracker_server}")
private String tracker_server;
//new获取上传连接对象
FastDFSClient fast = new FastDFSClient(trackerServer);
//上传文件
String[] upload_file = fast.uploadFile(bytes, extFilename, null);
创建fastDFS连接
代码语言:javascript复制 public FastDFSClient(@Value(value = "${tracker_server}") String tracker_server) throws Exception {
//注册fastDFS服务
ClientGlobal.initByTrackers(tracker_server);
trackerClient = new TrackerClient();
trackerServer = trackerClient.getConnection();
storageServer = null;
storageClient = new StorageClient1(trackerServer, storageServer);
}
二、getStoreStorage fail, errno code:28
引起错误的原因是,在我们配置tracker的时候,里面有一个配置项:
代码语言:javascript复制# reserved storage space for system or other applications.
# if the free(available) space of any stoarge server in
# a group <= reserved_storage_space,
# no file can be uploaded to this group.
# bytes unit can be one of follows:
### G or g for gigabyte(GB)
### M or m for megabyte(MB)
### K or k for kilobyte(KB)
### no unit for byte(B)
### XX.XX% as ratio such as reserved_storage_space = 10%
reserved_storage_space = 10%
该配置项是配置storage服务预留磁盘空间的大小的比值,默认是10%,即当磁盘空间不足10%时,则tracker拒绝上传文件。
解决方法:
- 删除不用的文件,最好调用DFS的删除API删除,因为DFS会维护一个索引文件,调用API删除时会连同索引文件都会删除。这种方式谨慎使用。
- 如果文件不允许删除,则需要扩展磁盘。
删除文件: 递归删除指定大小的文件,并打印出来
代码语言:javascript复制find . -name "*" -size 145800c -print -exec rm -rf {} ;